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

Агрегирана или прозоречна функция на PostgreSQL за връщане само на последната стойност

DISTINCT плюс функция прозорец

Добавете DISTINCT клауза:

SELECT DISTINCT a
     , last_value(b) OVER (PARTITION BY a ORDER BY b
                           RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM  (
   VALUES
     (1, 'do not want this')
    ,(1, 'just want this')
   ) sub(a, b);

Повече за DISTINCT :

По-просто и по-бързо с DISTINCT ON

PostgreSQL също има това разширение на SQL стандарта:

SELECT DISTINCT ON (a)
       a, b
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
ORDER  BY a, b DESC;

Повече за DISTINCT ON и евентуално по-бързи алтернативи:

Прост случай с обикновен агрегат

Ако вашият случай всъщност е толкова прост, колкото вашата демонстрация (и нямате нужда от допълнителни колони от този последен ред), обикновена обобщена функция ще бъде по-проста:

SELECT a, max(b)
FROM  (
   VALUES
     (1, 'do not want this')
   , (1, 'just want this')
   ) sub(a, b)
GROUP  BY a;


  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 и да я обработите в Ecto

  2. списък на схемата с размери (относителни и абсолютни) в база данни на PostgreSQL

  3. Защо нов потребител в PostgreSQL може да се свързва с всички бази данни?

  4. Несъответствие на версията на сървъра на PostgresSQL / pgAdmin4 / dump

  5. Postgresql поддържа ли lookbehind regexp?