PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come selezionare l'ID con un gruppo di date massimo per categoria in PostgreSQL?

Questo è un caso d'uso perfetto per DISTINCT ON - un'estensione specifica di Postgres dello standard DISTINCT :

SELECT DISTINCT ON (category)
       id  -- , category, date  -- any other column (expression) from the same row
FROM   tbl
ORDER  BY category, date DESC;

Attento con l'ordinamento decrescente. Se la colonna può essere NULL, potresti voler aggiungere NULLS LAST :

  • Ordina per colonna ASC, ma prima i valori NULL?

DISTINCT ON è semplice e veloce. Spiegazione dettagliata in questa risposta correlata:

  • Seleziona la prima riga in ogni gruppo GROUP BY?

Per grandi tabelle con molte righe per category considerare un approccio alternativo:

  • Ottimizza la query GROUP BY per recuperare l'ultima riga per utente
  • Ottimizza la query massima per gruppo