Trazer o ultimo registro gravado

02/03/2023

0

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

Responder

Post mais votado

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.

Arthur Heinrich

Arthur Heinrich
Responder

Mais Posts

02/03/2023

Arthur Heinrich

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.
Responder

02/03/2023

Arthur Heinrich

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.
Responder

02/03/2023

Reginaldo Souza



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
Responder

03/03/2023

Emerson Nascimento

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.

Responder

03/03/2023

Reginaldo Souza


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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar