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 MarcosAntonio
      boa tarde. 
      Estou precisando de um Select que retorne uma soma que ao chegar a determinado valor ela reinicie e continue fazendo sucessivamente
       select   pedido,   volume,   limite,   SUM(volume) over (order by pedido ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) saldo   from pedidos  group by pedido o select está retornando assim porém quero que toda vez que chegue ou passe do limite resete o saldo, por exemplo parar no 100 que é o limite e começar um novo saldo
      pedido     volume    limite    saldo  1             70            100        70  2             10            100        80  3             20            100        100  4             50            100        150  5             30            100        180  
      preciso que ele soma o volume enquanto o saldo seja <= que o "limite", quando passar pare de somar e comece outra soma começando do 0, como no exemplo abaixo.
      pedido    volume    limite    saldo  1             70            100        70  2             10            100        80  3             20            100        100  4             50            100        50  5             30            100        80  
    • By fabiorazevedo
      Boa noite, comecei a pouco a trabalhar com banco oracle, e vem acontecendo uma coisa muito estranha, pelo menos uma vez por semana o banco para, da erro de no listener, nas maquinas e preciso reiniciar o servidor (windows server 2016). olhando no alert não encontro nada, pela falta de experiencia, que possa parecer pertinente ao problema.
    • 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.
       
×

Important Information

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