Jump to content
asacap1000

Ultima data independente do id

Recommended Posts

Galera não sei o porque mas n select abaixo eu preciso mostrar o ultimo registro de uma das datas que são lançadas.

SELECT IO.ID_IN_OUT TICKET,
       TO_CHAR(IO.TIME_ARRIVAL, 'DD/MM/YYYY HH24:MI') CHEGADA,
       TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') LIBERADO,
       TO_CHAR(IO.TIME_IN, 'DD/MM/YYYY HH24:MI') ENTRADA,
       SUBSTR(SP.NAME, 0, 18) TRANSPORTADORA,
       SUBSTR(DR.NAME, 0, 18) MOTORISTA,
       VE.PLATE PLACA,
       (SELECT DISTINCT MAX(TOS.PLATZ) DOCA
          FROM PICKAUF PI,
               AUFTRAEGE TOS,
               (SELECT IO.ID_IN_OUT,
                       MAX(IO.TIME_RELEASE_PP) TIME_RELEASE_PP,
                       IOP.DOCUMENT,
                       MAX(IO.TIME_OUT) TIME_OUT
                  FROM IN_OUT IO, IN_OUT_POS IOP
                 WHERE IO.ID_IN_OUT = IOP.ID_IN_OUT
                      --AND IO.ART_IN_OUT IN ('CA', 'CCE', 'CC')
                   AND IO.STAT <> '80'
                 GROUP BY IOP.DOCUMENT, IO.ID_IN_OUT) SAD
         WHERE PI.CHARGE = TOS.NR_AUF
           AND SAD.ID_IN_OUT = IO.ID_IN_OUT
           AND SAD.DOCUMENT(+) =
               REPLACE(TRANSLATE(TOS.HINW_ZUST, '/-', '  '), ' ')
         GROUP BY SAD.ID_IN_OUT) DOCA
  FROM IN_OUT IO, SPEDITEURE SP, VEHICLE VE, TRACTOR TR, DRIVER DR
 WHERE IO.STAT <> '80'
   AND IO.TIME_ARRIVAL IS NOT NULL
   AND TR.ID_TRACTOR = IO.ID_TRACTOR
   AND DR.ID_DRIVER = IO.ID_DRIVER
   AND VE.ID_VEHICLE = IO.ID_VEHICLE
	  
   AND IO.TIME_RELEASE_PP IS NULL
   AND SP.ID_SPEDITEUR = IO.ID_SPEDITEUR
   AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE', 'CV')
   and rownum = '1'
 ORDER BY TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI')

Neste Select temos as datas de CHEGADA, LIBERADO, ENTRADA. eu preciso mostrar o ultimo registro do LIBERADO. Eu já fiz um max porém não retornou.Ela será utilizada em um telão no pátio de uma empresa.

 

O telão será desta forma

 

Capturar.thumb.JPG.e2b79e58f62bec652aef5e76fbd6af9d.JPG

Share this post


Link to post
Share on other sites

asacap1000

O que ocorre no seu caso é que você utiliza o campo DATA (Liberado) como STRING (TO_CHAR) e quando fazemos uma ordenação ORDER BY a ordem de uma STRING começa da esquerda para a direita, LOGO se eu tenho duas datas 04/12/2019 e 29/01/2019 o menor valor é 04/12/2019 porque o primeiro CHAR é 0 e ZEROS é menor do que o primeiro CHAR da outra data que é 2, então eu recomendo você a converter o campo de DATA no seu ORDEY BY para um campo DATA e então ordenar por DESC que é do MAIOR valor para o MENOR valor caso você queira limitar a 1 registro adiciona LIMIT 1.

 

Se o seu campo "IO.TIME_RELEASE_IN" for um campo do FORMATO DATE ou DATETIME na sua estrutura da tabela, você só precisa remover o "TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI')" e deixar apenas IO.TIME_RELEASE_IN DESC caso ele seja um VARCHAR recomendo você a utilizar um dos dois comandos abaixo:

 

Trocar TO_CHAR o para DATE_FORMAT como exemplo abaixo:

SELECT * FROM sua_tabela ORDER BY DATE_FORMAT(data_cadastro,'%d/%m/%Y')

Ou trocar TO_CHAR o para STR_TO_DATE como exemplo abaixo:

SELECT * FROM sua_tabela ORDER BY STR_TO_DATE( dt_registro_valor,  '%d/%m/%Y' )
SELECT IO.ID_IN_OUT TICKET,
       TO_CHAR(IO.TIME_ARRIVAL, 'DD/MM/YYYY HH24:MI') CHEGADA,
       TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') LIBERADO,
       TO_CHAR(IO.TIME_IN, 'DD/MM/YYYY HH24:MI') ENTRADA,
       SUBSTR(SP.NAME, 0, 18) TRANSPORTADORA,
       SUBSTR(DR.NAME, 0, 18) MOTORISTA,
       VE.PLATE PLACA,
       (SELECT DISTINCT MAX(TOS.PLATZ) DOCA
          FROM PICKAUF PI,
               AUFTRAEGE TOS,
               (SELECT IO.ID_IN_OUT,
                       MAX(IO.TIME_RELEASE_PP) TIME_RELEASE_PP,
                       IOP.DOCUMENT,
                       MAX(IO.TIME_OUT) TIME_OUT
                  FROM IN_OUT IO, IN_OUT_POS IOP
                 WHERE IO.ID_IN_OUT = IOP.ID_IN_OUT
                      --AND IO.ART_IN_OUT IN ('CA', 'CCE', 'CC')
                   AND IO.STAT <> '80'
                 GROUP BY IOP.DOCUMENT, IO.ID_IN_OUT) SAD
         WHERE PI.CHARGE = TOS.NR_AUF
           AND SAD.ID_IN_OUT = IO.ID_IN_OUT
           AND SAD.DOCUMENT(+) =
               REPLACE(TRANSLATE(TOS.HINW_ZUST, '/-', '  '), ' ')
         GROUP BY SAD.ID_IN_OUT) DOCA
  FROM IN_OUT IO, SPEDITEURE SP, VEHICLE VE, TRACTOR TR, DRIVER DR
 WHERE IO.STAT <> '80'
   AND IO.TIME_ARRIVAL IS NOT NULL
   AND TR.ID_TRACTOR = IO.ID_TRACTOR
   AND DR.ID_DRIVER = IO.ID_DRIVER
   AND VE.ID_VEHICLE = IO.ID_VEHICLE
	  
   AND IO.TIME_RELEASE_PP IS NULL
   AND SP.ID_SPEDITEUR = IO.ID_SPEDITEUR
   AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE', 'CV')
   and rownum = '1'
 ORDER BY TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI')
 ORDER BY DATE_FORMAT(IO.TIME_RELEASE_IN, '%d/%m/%Y %H/$i') DESC
--OU
 ORDER BY STR_TO_DATE(IO.TIME_RELEASE_IN, '%c/%e/%Y %r') DESC
--OU
 ORDER BY STR_TO_DATE(IO.TIME_RELEASE_IN, '%d/%m/%Y %H/$i') DESC

 

O seu erro esta aparentemente no TO_CHAR.

Explicação na prática com exemplo no site:

--> Viva O Linux - Convertendo Varchar em Date no MySQL para Ordenação.

 

Se a minha resposta for útil não esqueça de agradecer e votar positivo.

Espero ter ajudado de alguma forma.

 

Att
Felipe Guedes Coutinho

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By lezão
      Boa tarde, meus amigos!
      Td bem com vcs?
       
      Tenho um Select em ASP que tbm trabalho que roda normal.
      "SELECT * FROM Banners order by RND(INT(NOW*id_banners)-NOW*id_banners)"  
      E gostaria que roda se em PHP tbm mas infelizmente não estou conseguindo realizar esse acontecimento.
      "SELECT * FROM Produtos where Banners = 'Sim' order by RND(INT(NOW*Banners)-NOW*Banners)"  
      Desde ja muito obrigado!
       
    • By fideles
      Fala pessoal, tudo tranquilo?
       
      Venho recorrer a vós pois já não consigo mais.... 
       
      Tenho um campo select com algumas opções de nome.
      <select class="seleciona_nome"> <option value="Joao">Joao</option> <option value="Julio">Julio</option> <option value="Pedro">Pedro</option> </select>  
      E um campo input do tipo "text"
      <input type="text" class="opcaoSelect" autocomplete="off" disabled="disabled">  
      Preciso que ao selecionar uma opção do "Select" seja auto preenchido no input. Tenho um codigo que funcionava e não sei mais porque não funciona, veja abaixo;
       
      <script> $(document).ready(function(){ $('.seleciona_nome').on('change', addOption); }); function addOption(){ $('.opcaoSelect').val(this.value); } </script>  
      Peço ajuda ai caso alguém consiga me ajudar a entender porque este não funciona mais.
       
      Obrigado.
       
    • By mr22robot
      Boa tarde. 
      Oque eu preciso: Retornar registros sem repetir os que começam com os mesmo nomes.
      Ex: 
      em uma tabela eu tenho:
      Rafael Vieira
      Rafael Martins
      Lucia Vieira
       
      Deve retornar: 
      Rafael Vieira
      Lucia Vieira. 
      Neste caso eu faria para comparar as 5 primeiras letras. pra mim já serve. Pq o que eu preciso é:
      Comparar os 8 primeiro digitos de CNPJ  em uma tabela e ignorar os que começam iguais.
      Alguem consegue me ajudar?
      Muito grato
    • By Motta
      TikTok evita bloqueio graças a acordo com Oracle e Walmart
    • By danilo759
      Estou com uma dúvida, em uma tabelinha é cadastrado a data em uma coluna e a hora em outra coluna, então para "juntar" podemos usar CONCAT() no SELECT. Tudo certo...
       
      SELECT id, CONCAT(data_ini, ' ', hora_ini) as inicio FROM tabela

      Retorna como esperado:

       

      Minha dúvida é, se eu quiser exibir o horário de término para ficar assim como seria a consulta? Lembrando que não existe as colunas data_final e horario_final.

      2020-09-13 03:00:00 2020-09-13 04:00:00
      2020-09-13 04:00:00 2020-09-13 05:00:00
      2020-09-13 05:00:00 ....
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.