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 Thomeny
      Olá pessoal, sou novo no mundo da programação e banco de dados, quer dizer passei vários anos parado em outra área e agora resolvi voltar.
       
      Enfim estou precisando fazer o seguinte:
       
      Tenho dois campos que usa um select (irei colocar logo abaixo) para ambos.
      Esse select traz o resultado iguais para os dois, porém o cliente precisa fazer o seguinte:
       
      Para combobox 1 ao selecionar paciente, esse paciente não apareça no combobox dois porque já foi selecionado.
       
      Como procedo, se puderem ser claros, abaixo segue o select usado em ambos pra trazer a lista de pacientes...
       
      Select Distinct
        PC.PES_COD,
        PC.PES_NOME,
        PF.NASCIMENTO,
        PF.PFI_MAE,
        Concat(PC.PES_COD, ' - ', LTrim(RTrim(PC.PES_NOME)), ' - ', PF.NASCIMENTO, ' - ', LTrim(RTrim(PF.PFI_MAE))) As NOME
      From
        GER_PESSOA PC
        Inner Join
        GER_PESSOA_FISICA PF On (PC.PES_COD = PF.PES_COD)
      Order By
        PC.PES_NOME
    • By JurisCode
      OLÁ A TODOS, Boa tarde. Preciso de ajuda com o seguinte script.
       
      eu tenho uma array que é a seguinte:
       
      array (size=7)   0 => string 'gu' (length=2)   1 => string 'tr' (length=2)   2 => string 'fr' (length=2)   3 => string 'ip' (length=2)   4 => string 'al' (length=2)   5 => string 'po' (length=2)   6 => string 'xa' (length=2) Cada string da array de duas letra é a abreviatura de uma cidade; eu quero fazer uma pesquisa na base da dados para cada sigla dessa para ver qual a cidade correspondente. Como vai ser necessariamente um resultado apenas, eu tive que usar o foreach.
       
      Tipo
      foreach($array as $variavel);         {         $busca = $conn->query("SELECT * FROM tabela WHERE sigla = '$variavel'");         $resultado = $busca->fetch_assoc();         echo ' - '. $resultado['significado_da_sigla'];         } } Não está funcionando perfeitamente, mas imprime apenas o último resultado.
       
      Eu já tentei uma variável para ir acumulando o resultado, tipo
       
      if (empty('$resultado_busca')) {     $resultado_busca = $resultado['significado_da_sigla'];     }     else {     $resultado_busca = $resultado_busca . ' - ' . $resultado['significado_da_sigla'];     } ou seja, se a variável foi vazia (da primeira vez), então vai criar uma variável com o primeiro resultado, se a variável já existir (das outras vezes), então a variável vai ser igual à variavel anteriormente criado adicionando um traço e o próximo resultado.
       
      E depois, em vez de imprimir a variável com fetch_assoc $resultado['significado_da_sigla'] eu imprimiria a variável &resultado_busca, que em cada ciclo iria acumulando os resultados, mas também não está funcionando, essa não imprime nada na tela.
       
      Alguém pode dar uma ajuda?
       
      OBRIGADO, DESDE JÁ
    • By Akahs
      Caros Amigos, 
      Estou com uma dúvida que me atormenta tem uma semana e simplesmente travei por não conseguir resolver. 
      Tenho um site onde o cliente vai escolher, através de um formulário de registro, se ele vai necessitar ou não de um traslado até o evento. Caso ele escolha "Não", nada acontece. Caso ele escolha "Sim", eu quero que apareça o outro select com as opções de hotéis de onde ele vai se hospedar para pegar o traslado. Pois bem, eis meu código na parte de formulário:
       
      <div class="col-md-6"> <div class="form-group"> <select class="form-control" name="traslado" id="traslado"> <option value="">Necessita Traslado?*</option> <option value="Sim">Sim</option> <option value="Não">Não</option> </select> </div> </div> <div class="col-md-6" id="teste"> <div class="form-group" style="display:none;"> <select class="form-control" name="hotel" id="hotel"> <option value="0">Se Sim, escolha o Hotel de Origem*</option> <option value="SleepIn Jacarei">SleepIn Jacareí</option> <option value="Ibis Jacarei">Íbis Jacareí</option> <option value="Ibis SJC">Ibis SJC</option> <option value="Novotel SJC">Novotel SJC</option> </select> </div> </div>  
      Percebam que, ao responder "Sim" para a opção de "Traslado" eu quero que as opções de "Hoteis" apareçam juntamente com o outro grupo de select "form-control". 
      Pensei em duas formas de trabalhar:
      A primeira seria manipulando a div do "form-control" relativo aos hoteis, ela fica oculta e ao clicar em Sim em "Traslado" ela aparece. (Tentei fazer, sem sucesso.)
      A outra seria manipular o style "display:none", enfim, uma idéia que me ocorreu. 
       
      Fiz uns códigos em JavaScript porém nenhum funcionou, o que cheguei mais perto foi sumir o formulário todo.
      Se alguém puder dar alguma dica e/ou solução ficarei enormemente agradecido. 
      Att,

    • By JurisCode
      eu tenho uma array que é a seguinte:
      array (size=7)   0 => string 'gu' (length=2)   1 => string 'tr' (length=2)   2 => string 'fr' (length=2)   3 => string 'ip' (length=2)   4 => string 'al' (length=2)   5 => string 'po' (length=2)   6 => string 'xa' (length=2) eu quero fazer uma pesquisa na base da dados para cada sigla dessa para ver qual o significado correspondente. Como vai ser necessariamente um resultado apenas, não tem motivo para usar o while, mas fazer via foreach.
       
      Tipo
      foreach($array as $variavel); { $busca = $conn->query("SELECT * FROM tabela WHERE sigla = '$variavel'"); $resultado = $busca->fetch_assoc(); echo ' - '. $resultado['significado_da_sigla']; } }  
      Mas tá imprimindo só o último resultado.
    • By Suporte Risti
      Bom dia, estou iniciando com bando de dados oracle e plsql e estou precisando de uma ajuda para criar um arquivo .bat para nossa empresa em que o usuário consiga apagar os horários do nosso banco de dados, mas não sei como fazer a procedure identificar o dado digitado na variável do .bat
       
      script do .bat
      @echo Off title limpeza de horarios. : inicio cls echo -------------------Informe uma data valida, apenas numeros------------------- echo . echo ------------------------------informe a data--------------------------------- set /p data = echo . echo . sqlplus usuario/senha@intancia @script.sql cls echo . : Fim echo . echo -----------------Horario apagado----------------- echo . pause O script em questão é esse, ele executa uma procedure, ela apaga os horários, o parâmetro da mesma é uma data ex: abaixo.
      set serveroutput on begin sp_apaga_horario('31072019'); end; / exit como eu faço para o dado salvo na variável data seja executado no parâmetro da procedure? não estou conseguindo fazer isso, estou tendo que alterar o script para data que o usuário quer apagar e somente executando o .bat digitando números aleatórios para que ele não trave, não sei como fazer para a mesma identificar esse dado estando em um script diferente.
       
      Quem souber e puder me ajudar ja agradeço desde já.
×

Important Information

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