Buscar Ultimo Registro no SELECT

7 respostas
J

Pessoal tenho um select para realizar e estou com um problema
ele me traz diversos registros e gostaria que ele me trouxesse o ultimo registro de cada ID, em um caso quando posso filtrar pelo ID eu resolvi assim

porem quando não tenho este filtro não consigo filtrar…
estou usando o postgres 8 e imaginava que ele possuisse alguma função como LAST, mas a não consigo fazer a mesma funcionar nele…

se alguem tiver uma ideia ou saiba alguma função que rode nele e possa me ajudar eu ficaria muito grato.

Abraço a todos!!

7 Respostas

P

Olá jpacheco, vc já tentou usar o método isLast da Classe ResultSet??? Não sei ao certo se resolverá o seu problema, mas é uma sujestão, blz???

while(res.next()){
     if(res.isLast()) {
         //pegar o ultimo registro
     }
}

Taí a dica…

Até mais, phill.

C

voce pode chamar direto no ResultSet

if(resultSet.last()){
//faz alguma coisa.
}
J

Bom dia pessoal,
creio que vocês não me entenderam, eu quero resolver este problema no select e não no java, e de qualquer forma acho que vocês não entenderam, irei explicar novamente:

em um select eu posso trazer diversos embarques, cada embarque pode se repetir algumas vezes, pois ele pode repetir porem com data diferente.
Eu gostaria de fazer o select e no select buscar todos os embarques porem sem repeti-los e pegando os embarques que tem a data mais atual…

de qualquer forma muito obrigado.

Se alguem tiver mais alguma ideia…

Abraço a todos!!

C

Entao voce deve fazer uma select precisa, que retorne apenas o que voce quer. Se a sua select nao consiga fazer isto (id = parametro) voce terá que filtrar com ajuda das classes do JAva.

J

Sim eu ja tenho meu select que é este:

e é nele que esta o problema pq este ai eu devo fazer uma consulta geral,

no que eu faço a consulta e recebo o ID eu apenas acrescentei um AND

para filtrar pelo ID e coloquei esta clausula

No order BY para trazer o ultimo ID com DESC e pegar apenas um com LIMIT 1,
porem quando não posso efetuar o filtro pelo ID não posso fazer isso.
No mysql creio eu tem o comando LAST passando o ID antes do from que com ele eu posso trazer apenas o ultimo …

mas estou usando o postgres e o mesmo não possui este comando pelo visto…
e não estava qurendo fazer isso no java em vista de ele ter de percorrer muitos registros dependendo o que o select trara…

A

beleza aí, colega…
quando você disse que os embarques poderiam se repetir e você precisa pegar apenas o mais atual, fiquei pensando que você poderia resolver acrescentando a seguinte cláusula no teu select:

embarques.dt_emissao = 
(select max(sub.dt_emissao)
 from embarques sub
 where sub.ID = embarques.ID)

Essa é a idéia básica, precisa verificar melhor o join entre o select externo e esse sub-select que vai buscar a maior data existente de cada embarque.

A

Sou novata em Java e Postgree. Há muitos anosprogramava em Clipper e utilizava o DBF como banco de dados.

Minha dúvida é a seguinte: Estou fazendo um teste com o Postgre com mais de 150 milhões de registros. Não criei um campo com ID serial(de propósito) mas preciso pegar o último registro e ver o que foi lançado nele.
As propostas deste foram foram o de usar o ORDER BY … DESC LIMIT 1. Ocorre que para um banco de dados com este tamanho, o retorno é bastante demorado.
Não utilizei a opção MAX pq, conf. dito, não tenho um campo autoincrementável.
Alguém tem outra solução que seja mais rápida?

Criado 26 de setembro de 2007
Ultima resposta 11 de dez. de 2010
Respostas 7
Participantes 5