Bei der Arbeit mit Daten ist es oft notwendig, bestimmte Informationen aus verschiedenen Datensätzen zu extrahieren. Im Fall von PostgreSQL können Benutzer auf Szenarien stoßen, in denen sie den neuesten Datensatz für jede eindeutige ID abrufen müssen.
Beachten Sie die folgende Tabelle:
id | date | another_info |
---|---|---|
1 | 2014-02-01 | kjkj |
1 | 2014-03-11 | ajskj |
1 | 2014-05-13 | kgfd |
2 | 2014-02-01 | SADA |
3 | 2014-02-01 | sfdg |
3 | 2014-06-12 | fdsA |
Das Ziel besteht darin, die letzte Datenzeile für jede eindeutige ID in einer neuen zu extrahieren Tabelle:
id | date | another_info |
---|---|---|
1 | 2014-05-13 | kgfd |
2 | 2014-02-01 | SADA |
3 | 2014-06-12 | fdsA |
Der DISTINCT ON-Operator von Postgres bewältigt dieses Szenario effizient:
select distinct on (id) id, date, another_info from the_table order by id, date desc;
Aus Gründen der datenbankübergreifenden Kompatibilität können Fensterfunktionen wie row_number() verwendet werden verwendet:
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;
Benchmarks zeigen typischerweise an, dass der Fensterfunktionsansatz schneller ist als Unterabfragen.
Das obige ist der detaillierte Inhalt vonWie rufe ich die letzte Zeile für jede eindeutige ID in PostgreSQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!