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 FabianoSouza
      Estou usando SQL dinâmico num select. Até aqui tudo bem. Funciona.
       
      Agora preciso pegar alguns campos desse select e passar para variáveis.
      Na forma normal seria assim (isso funciona)
      SELECT @checkAcesso = COUNT(*), @contAcesso = campo2 FROM tab ... Estou tentando adaptar para conseguir isso acima, mas num SELECT dinâmico. Mas sem sucesso.
      SET @sql = 'SELECT ' SET @sql = @sql + @variavel + '= T.meuCampo ' SET @sql = @sql + ' FROM tabela AS T ' EXEC(@sql) Dessa forma simplesmente não exibe nada.
       
      Help!
    • By Wanderson Moreira
      bom dia, 

      preciso fazer um select e verificar se o ID do usuário logado existe em em uma coluna do banco de dados
      por exemplo

      ID Usuario: 6
      coluna do banco: 1, 3, 5, 16
       
      O problema é que se eu fizer o select com LIKE ele considera o numero 16 como 1 e 6 invés de considerar um numero só, com isso o usuário 6 acaba sendo incluso no select indevidamente
       
      alguém poderia me ajudar?
    • By neto_celino
      Estou usando o seguinte código para somar um SELECT, mas cheguei em um determinado ponto que travei.
       
      Tenho 400 registros na DB e tenho que somar alguns registros somente. Ou seja, somar o (valortotal) de alguns ID's somente. 
      É possivel e por onde vou ? rs.
      <?php $subtotal = "SELECT SUM(valortotal) from tbl_compras WHERE id = VariosIdAqui"; $resultado = mysql_query($subtotal); $registro = mysql_fetch_row($resultado); echo number_format($registro[0], 2, ',', ' ') ;  ?>      
    • By mamotinho
      Olá, gostaria de sabe como posso fazer uma contagem regressiva apartir de um registro em meu banco de dados eu tentei montar um código da seguinte forma:

       
      <? $DateGET = date('m/d/Y H:i A', strtotime($result->DateDiscount)); ?> <script> var valueDate = <?=$DateGET?>; var end = new Date(valueDate); var _second = 1000; var _minute = _second * 60; var _hour = _minute * 60; var _day = _hour * 24; var timer; function showRemaining() { var now = new Date(); var distance = end - now; if (distance < 0) { clearInterval(timer); document.getElementById("countdown").innerHTML = "EXPIRED!"; return; } var days = Math.floor(distance / _day); var hours = Math.floor((distance % _day) / _hour); var minutes = Math.floor((distance % _hour) / _minute); var seconds = Math.floor((distance % _minute) / _second); document.getElementById("countdown").innerHTML = "<span class='n_date day' id='days'>" + days + "</span><span class='date'>일</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time hour' id='hrs'>" + hours + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time minute' id='minus'>" + minutes + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time second' id='secs'>" + seconds + "</span>"; } timer = setInterval(showRemaining, 1000); </script> Mais infelizmente não passou a data registrada no banco de dados, alguém teria ideia de como posso ta fazendo.
    • By Giovanird
      Olá amigos!
      Tenha a seguinte estrutura no banco MySQL
      COD   |   PONTOX  |  PONTOY  |  ATLETAX       |  ATLETAY
      1         |   0               |  1               |  Maria              |  João
      2         |   2               |  0               |  João               |  Maria
      3         |   0               |  2               |  Maria              |  João
      4         |   7               |  5               |  Maria              |  João
      5         |   0               |  3               |  João               |  Maria
      6         |   2               |  1               |  João               |  Maria
      7         |   0               |  6               |  Maria              |  João
      8         |   4               |  0               |  João               |  Maria
       
      Preciso de ajuda para somar quantos pontos fez o atleta João nos últimos 5 torneios (COD 8, 7, 6, 5 e 4)  Há momento que o João jogou em X e outro momento em Y.
      Abaixo segue meu Select, onde a soma dos pontos deve ser 17.
       
      nomeatleta = "João"
      Set soma= banco.execute("SELECT sum(PONTOX ) AS somax,  sum(PONTOY ) AS somay FROM (select cod, pontox, pontoy, atletax, atletay  from torneios where (atletax like '"&nomeatleta&"' or atletay like '"&nomeatleta&"') order by cod desc limit 5) AS temp")
       
×

Important Information

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