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