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

PostgreSQL - DISTINCT ON и GROUP BY синтаксис

За да можете да изберете всички колони, а не само object_id и MAX(event_timestamp) , можете да използвате DISTINCT ON

SELECT DISTINCT ON (object_id) 
    object_id, event_timestamp    ---, more columns
FROM test_select 
ORDER BY object_id, event_timestamp DESC ;

Ако искате резултатите да са подредени по event_timestamp DESC а не по object_id , трябва да го включите в извлечена таблица или CTE:

SELECT *
FROM 
  ( SELECT DISTINCT ON (object_id) 
        object_id, event_timestamp    ---, more columns
    FROM test_select 
    ORDER BY object_id, event_timestamp DESC 
  ) AS t
ORDER BY event_timestamp DESC ;

Като алтернатива можете да използвате прозоречни функции, като ROW_NUMBER() :

WITH cte AS
  ( SELECT ROW_NUMBER() OVER (PARTITION BY object_id 
                              ORDER BY event_timestamp DESC) 
             AS rn, 
           object_id, event_timestamp    ---, more columns
    FROM test_select 
  )
SELECT object_id, event_timestamp    ---, more columns
FROM cte
WHERE rn = 1
ORDER BY event_timestamp DESC ;

или агрегат MAX() с OVER :

WITH cte AS
  ( SELECT MAX(event_timestamp) OVER (PARTITION BY object_id) 
             AS max_event_timestamp, 
           object_id, event_timestamp    ---, more columns
    FROM test_select 
  )
SELECT object_id, event_timestamp    ---, more columns
FROM cte
WHERE event_timestamp = max_event_timestamp
ORDER BY event_timestamp DESC ;


  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. Docker Compose и Postgres:Името не се разрешава

  3. PostgreSQL без инсталация, работещ в Windows, но сървърът не стартира в CentOS Linux

  4. psql:командата не е намерена Mac

  5. Използване на pt-pg-summary Percona Toolkit за PostgreSQL