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