Jest to idealny przypadek użycia dla DISTINCT ON
- specyficzne dla Postgres rozszerzenie standardu DISTINCT
:
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Ostrożnie z malejącym porządkiem sortowania. Jeśli kolumna może mieć wartość NULL, możesz dodać NULLS LAST
:
- Sortować według kolumny ASC, ale najpierw wartości NULL?
DISTINCT ON
jest prosty i szybki. Szczegółowe wyjaśnienie w tej powiązanej odpowiedzi:
- Wybrać pierwszy wiersz w każdej grupie GROUP BY?
Dla dużych tabel z wieloma wierszami na category
rozważ alternatywne podejście:
- Zoptymalizuj zapytanie GROUP BY, aby pobrać ostatni wiersz na użytkownika
- Optymalizuj maksymalne zapytanie grupowe