Trazer o ultimo registro gravado
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:
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?
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
Curtidas 0
Melhor post
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
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
02/03/2023
Como você possui duas colunas para informar a data/hora:
Para que esta query seja eficiente, um índice por (cdfil, nrrqu, dia, hora) é desejável.
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
02/03/2023
Como você possui duas colunas para informar a data/hora:
Para que esta query seja eficiente, um índice por (cdfil, nrrqu, dia, hora) é desejável.
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
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.
crie índices pelos campos mais utilizados em filtros/relacionamentos para aumentar a performance da pesquisa.
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)
GOSTEI 0
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