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