PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да изберете идентификатор с група за максимална дата по категория в PostgreSQL?

Това е перфектен случай на използване за 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, за да извлечете последния ред на потребител
  • Оптимизиране на груповата максимална заявка


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да увеличите максималния брой връзки в PostgreSQL

  2. Как променяте кодирането на знаци на база данни на Postgres?

  3. Как сега() работи в PostgreSQL

  4. Има ли начин да се дефинира именувана константа в заявка на PostgreSQL?

  5. Използване на прозоречни функции в изявление за актуализиране