Trazer o ultimo registro gravado

SQL

SELECT

IBExpert

02/03/2023

Pessoal tudo bem com voces?
preciso de uma ajuda no seguinte.
tenho uma tabela que registra as etapas de produção de uma determinada requisição. só que, o sistema gera um novo registro para cada nova etapa e o mesmo grava a data e hora da etapa. como eu poderia fazer para que a minha consulta em SQL possa me retornar apenas o ultimo registro? por exemplo. se eu fizer uma consulta simples igual o modelo abaixo:
select * from fc12500 where cdfil=1 and nrrqu= 87625


a consulta vai me retornar cerca de 15 linhas com todos as etapas. nao tenho como inserir imagem aqui porem o ultimo registro ou ultima linha gravado é por exemplo da coluna "dia 28/02/2023" e na coluna "hora 19:00:00"

sera que teria uma forma de no select a consulta trazer somente a ultima linha registrada?
Reginaldo Souza

Reginaldo Souza

Curtidas 0

Melhor post

Arthur Heinrich

Arthur Heinrich

03/03/2023


com esta condição que voce me deu ele retornou este erro
can't format message 13:896 -- message file C:\\\\WINDOWS\\\\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 12.
1.

a consulta ficou da seguinte forma
select top 1 cdfil, nrrqu, data, hora from fc12500 where cdfil=1 and nrrqu= 87625 order by data desc, hora desc


No Firebird, para retornar as primeiras linhas parece que temos que utilizar "first" ao invés de "top":

select first 1 cdfil, nrrqu, data, hora from fc12500 where cdfil=1 and nrrqu= 87625 order by data desc, hora desc


Mas a mensagem acima não ajudou em nada.

Perceba a ideia da query. Filtrar os registros da requisição e retorná-los em ordem decrescente pela data, obtendo assim, o registro mais recente na primeira linha. Então, aplica-se um filtro para retornar apenas esta primeira linha.
GOSTEI 1

Mais Respostas

Arthur Heinrich

Arthur Heinrich

02/03/2023

select top 1 * from fc12500 where cdfil=1 and nrrqu= 87625 order by data desc


Para que esta query seja eficiente, um índice por (cdfil, nrrqu, data) é desejável.
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

02/03/2023

Como você possui duas colunas para informar a data/hora:

select top 1 * from fc12500 where cdfil=1 and nrrqu= 87625 order by dia desc, hora desc


Para que esta query seja eficiente, um índice por (cdfil, nrrqu, dia, hora) é desejável.
GOSTEI 0
Reginaldo Souza

Reginaldo Souza

02/03/2023



Como você possui duas colunas para informar a data/hora:

select top 1 * from fc12500 where cdfil=1 and nrrqu= 87625 order by dia desc, hora desc


Para que esta query seja eficiente, um índice por (cdfil, nrrqu, dia, hora) é desejável.


com esta condição que voce me deu ele retornou este erro
can't format message 13:896 -- message file C:\\WINDOWS\\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 12.
1.

a consulta ficou da seguinte forma
select top 1 cdfil, nrrqu, data, hora from fc12500 where cdfil=1 and nrrqu= 87625 order by data desc, hora desc
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

02/03/2023

o ideal seria você ter um campo data/hora, assim o uso de um max() resolveria seu problema.
como são data e hora estão em campos distintos, veja se a instrução abaixo funciona pra você, tanto em resultado, quanto em performance.
select
   t1.*
from
   fc12500 t1
where
   t1.cdfil=1
   and t1.nrrqu= 87625
   and t1.dia = (select max(t2.dia) from fc12500 t2 where t2.cdfil = t1.cdfil and t2.nrrqu = t1.nrrqu)
   and t1.hora = (select max(t2.hora) from fc12500 t2 where t2.cdfil = t1.cdfil and t2.nrrqu = t1.nrrqu and t2.dia = t1.dia)
crie índices pelos campos mais utilizados em filtros/relacionamentos para aumentar a performance da pesquisa.

GOSTEI 0
Reginaldo Souza

Reginaldo Souza

02/03/2023


com esta condição que voce me deu ele retornou este erro
can't format message 13:896 -- message file C:\\\\\\\\WINDOWS\\\\\\\\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 12.
1.

a consulta ficou da seguinte forma
select top 1 cdfil, nrrqu, data, hora from fc12500 where cdfil=1 and nrrqu= 87625 order by data desc, hora desc


No Firebird, para retornar as primeiras linhas parece que temos que utilizar "first" ao invés de "top":

select first 1 cdfil, nrrqu, data, hora from fc12500 where cdfil=1 and nrrqu= 87625 order by data desc, hora desc


Mas a mensagem acima não ajudou em nada.

Perceba a ideia da query. Filtrar os registros da requisição e retorná-los em ordem decrescente pela data, obtendo assim, o registro mais recente na primeira linha. Então, aplica-se um filtro para retornar apenas esta primeira linha.


Arthur Heinrich prezado amigo.

voce salvou meu dia. é isso mesmo deu certo a consulta. desde já te agradeço de coração
GOSTEI 0
POSTAR