Dit is een perfecte use-case voor DISTINCT ON
- een Postgres-specifieke uitbreiding van de standaard DISTINCT
:
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Pas op met aflopende sorteervolgorde. Als de kolom NULL kan zijn, wil je misschien NULLS LAST
. toevoegen :
- Sorteren op kolom ASC, maar NULL-waarden eerst?
DISTINCT ON
is eenvoudig en snel. Gedetailleerde uitleg in dit gerelateerde antwoord:
- Selecteer de eerste rij in elke GROUP BY-groep?
Voor grote tabellen met veel rijen per category
overweeg een alternatieve aanpak:
- Optimaliseer de GROUP BY-query om de laatste rij per gebruiker op te halen
- Optimaliseer groepsgewijze maximale zoekopdracht