Als Beispiel möchte ich ID mit maximaler Datumsgruppe nach Kategorie auswählen. Das Ergebnis ist: 7, 2, 6
id category date
1 a 2013-01-01
2 b 2013-01-03
3 c 2013-01-02
4 a 2013-01-02
5 b 2013-01-02
6 c 2013-01-03
7 a 2013-01-03
8 b 2013-01-01
9 c 2013-01-01
Darf ich wissen, wie das in PostgreSQL geht?
sql
postgresql
greatest-n-per-group
user2412043
quelle
quelle
Antworten:
Dies ist ein perfekter Anwendungsfall für
DISTINCT ON
(Postgres-spezifische Erweiterung des StandardsDISTINCT
):Vorsicht bei absteigender Sortierreihenfolge. Wenn die Spalte NULL sein kann, möchten Sie möglicherweise Folgendes hinzufügen
NULLS LAST
:DISTINCT ON
ist am einfachsten und schnellsten. Detaillierte Erklärung in dieser verwandten Antwort:Betrachten Sie für große Tische diesen alternativen Ansatz:
Leistungsoptimierung für viele Zeilen pro
category
:quelle
Probier diese:
Siehe diese SQLFiddle
quelle
Ein anderer Ansatz ist die Verwendung der
first_value
Fensterfunktion: http://sqlfiddle.com/#!12/7a145/14... obwohl ich vermute, dass der Vorschlag von hims056 normalerweise besser abschneidet, wenn geeignete Indizes vorhanden sind.
Eine dritte Lösung ist:
quelle
SELECT id FROM tbl GROUP BY cat HAVING MAX (Datum)
quelle