Toto je perfektní případ použití pro DISTINCT ON
- Postgres specifické rozšíření standardu DISTINCT
:
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Pozor na sestupné řazení. Pokud sloupec může mít hodnotu NULL, možná budete chtít přidat NULLS LAST
:
- Seřadit podle sloupce ASC, ale nejprve hodnoty NULL?
DISTINCT ON
je jednoduchý a rychlý. Podrobné vysvětlení v této související odpovědi:
- Vybrat první řádek v každé skupině GROUP BY?
Pro velké tabulky s mnoha řádky na category
zvažte alternativní přístup:
- Optimalizujte dotaz GROUP BY pro načtení posledního řádku na uživatele
- Optimalizujte maximální počet dotazů ve skupině