"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como recuperar com eficiência a última linha para cada identificador exclusivo no PostGresql?

Como recuperar com eficiência a última linha para cada identificador exclusivo no PostGresql?

Postado em 2025-04-04
Navegar:738

How to Efficiently Retrieve the Last Row for Each Unique Identifier in PostgreSQL?

postGresql: Extraindo a última linha para cada identificador exclusivo

em postgresql, você pode encontrar situações em que você precisa extrair as informações da linha associada a cada identificador distinto. Considere os seguintes dados:

select distinct on (id) id, date, another_info
from the_table
order by id, date desc;


para recuperar a última linha de informações para cada ID exclusivo no conjunto de dados, você pode empregar distinto eficiente do PostGres no operador:
selecione Distintos em (id) id, outro do_table Ordem por id, data des desc;

Esta consulta retornará a seguinte saída:
select id, date, another_info
from (
  select id, date, another_info, 
         row_number() over (partition by id order by date desc) as rn
  from the_table
) t
where rn = 1
order by id;
 id date outros_info 

1 2014-05-13 kgfd

2 2014-02-01 Solução de dados cruzados que podem sacrificar um pequeno desempenho, você pode usar uma função de janela:


selecione ID, data, outro_info de ( Selecione ID, data, outro_info, row_number () sobre (partição por ordem de identificação por data desc) como RN do_table ) t onde rn = 1 Ordem por id;

Na maioria dos casos, a solução envolvendo uma função de janela é mais rápida do que usar um sub-quadro.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3