Problem:
Gegeben sind die folgenden Daten, die Sie extrahieren möchten der letzte Datensatz für jede eindeutige ID:
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
Gewünscht Ergebnis:
id date another_info 1 2014-05-13 kgfd 2 2014-02-01 SADA 3 2014-06-12 fdsA
Lösung:
Es gibt zwei effiziente Methoden, um dies in PostgreSQL zu erreichen:
Methode 1 : Verwendung des DISTINCT ON-Operators
Postgres stellt den DISTINCT ON-Operator bereit, der ermöglicht es Ihnen, unterschiedliche Zeilen basierend auf einer oder mehreren Spalten auszuwählen und dann andere Vorgänge anzuwenden. Für dieses Szenario können Sie Folgendes verwenden:
SELECT DISTINCT ON (id) id, date, another_info FROM the_table ORDER BY id, date DESC;
Methode 2: Verwenden einer Fensterfunktion
Mit Fensterfunktionen können Sie Aggregationen oder Berechnungen über eine Reihe von Zeilen durchführen die dynamisch definiert werden kann. Sie können eine Fensterfunktion namens ROW_NUMBER() verwenden, um jeder Zeile innerhalb jeder ID-Gruppe einen Rang zuzuweisen und die Zeile mit dem höchsten Rang auszuwählen:
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;
Die Lösung mit einer Fensterfunktion ist normalerweise schneller als mit eine Unterabfrage.
Das obige ist der detaillierte Inhalt vonWie kann ich die letzte Zeile für jede ID in PostgreSQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!