PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie wähle ich eine ID mit maximaler Datumsgruppe nach Kategorie in PostgreSQL aus?

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