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