Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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

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:
***--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') DESCO 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.
AttFelipe Guedes Coutinho