Това е перфектен случай на използване за DISTINCT ON
- специфично за Postgres разширение на стандартния DISTINCT
:
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Внимавайте с низходящ ред на сортиране. Ако колоната може да бъде NULL, може да искате да добавите NULLS LAST
:
- Сортиране по колона ASC, но първо NULL стойности?
DISTINCT ON
е просто и бързо. Подробно обяснение в този свързан отговор:
- Изберете ли първия ред във всяка група GROUP BY?
За големи таблици с много редове за category
помислете за алтернативен подход:
- Оптимизирайте заявката GROUP BY, за да извлечете последния ред на потребител
- Оптимизиране на груповата максимална заявка