Detta är ett perfekt användningsfall för DISTINCT ON - en Postgres-specifik förlängning av standarden DISTINCT :
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Försiktig med fallande sorteringsordning. Om kolumnen kan vara NULL, kanske du vill lägga till NULLS LAST :
- Sortera efter kolumn ASC, men NULL-värden först?
DISTINCT ON är enkelt och snabbt. Detaljerad förklaring i detta relaterade svar:
- Välj första raden i varje GROUP BY-grupp?
För stora tabeller med många rader per category överväga ett alternativt tillvägagångssätt:
- Optimera GROUP BY-frågan för att hämta den senaste raden per användare
- Optimera gruppvis maximal fråga