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