Dies ist ein perfekter Anwendungsfall für DISTINCT ON
- eine Postgres-spezifische Erweiterung des Standards DISTINCT
:
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Vorsicht bei absteigender Sortierreihenfolge. Wenn die Spalte NULL sein kann, möchten Sie vielleicht NULLS LAST
hinzufügen :
- Nach Spalte ASC sortieren, aber zuerst NULL-Werte?
DISTINCT ON
ist einfach und schnell. Detaillierte Erklärung in dieser verwandten Antwort:
- Erste Zeile in jeder GROUP BY-Gruppe auswählen?
Für große Tabellen mit vielen Zeilen pro category
Betrachten Sie einen alternativen Ansatz:
- Optimieren Sie die GROUP BY-Abfrage, um die neueste Zeile pro Benutzer abzurufen
- Gruppenweise maximale Abfrage optimieren