Betrachten Sie einen Datensatz mit Spalten für ID, Datum und zusätzliche Informationen:
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
Unser Ziel ist es, die aktuellste Zeile für jede eindeutige ID abzurufen.
Der effizienteste Ansatz in PostgreSQL ist die Verwendung des DISTINCT ON-Operators:
SELECT DISTINCT ON (id) id, date, another_info FROM the_table ORDER BY id, date DESC;
Diese Abfrage identifiziert und gibt nur die erste eindeutige Zeile für jede eindeutige ID zurück, sortiert in absteigender Reihenfolge die Datumsspalte.
Für eine datenbankübergreifende Lösung können wir Fenster nutzen Funktionen:
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;
Diese Abfrage erstellt eine Fensterfunktion zur Berechnung der Zeilennummer für jede ID, sortiert nach Datum in absteigender Reihenfolge. Die Bedingung WHERE rn = 1 filtert Zeilen so, dass sie nur die höchstrangige Zeile für jede ID enthalten, und die abschließende ORDER BY-Klausel stellt sicher, dass die Ergebnisse nach ID sortiert werden.
Das obige ist der detaillierte Inhalt vonWie kann ich in PostgreSQL effizient die aktuellste Zeile für jede ID abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!