Dette er en perfekt use-case for DISTINCT ON
- en Postgres-specifik udvidelse af standarden DISTINCT
:
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Forsigtig med faldende sorteringsrækkefølge. Hvis kolonnen kan være NULL, kan du tilføje NULLS LAST
:
- Sortere efter kolonne ASC, men NULL-værdier først?
DISTINCT ON
er enkel og hurtig. Detaljeret forklaring i dette relaterede svar:
- Vælg første række i hver GROUP BY-gruppe?
Til store tabeller med mange rækker pr. category
overvej en alternativ tilgang:
- Optimer GROUP BY-forespørgsel for at hente seneste række pr. bruger
- Optimer gruppevis maksimal forespørgsel