PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL - sintaks DISTINCT ON dan GROUP BY

Untuk dapat memilih semua kolom dan tidak hanya object_id dan MAX(event_timestamp) , Anda dapat menggunakan DISTINCT ON

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

Jika Anda ingin hasil diurutkan berdasarkan event_timestamp DESC dan bukan dengan object_id , Anda harus memasukkannya ke dalam tabel turunan atau 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 ;

Atau, Anda dapat menggunakan fungsi jendela, seperti 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 ;

atau agregat MAX() dengan 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. Cara Membuat API GraphQL Tanpa Server untuk MySQL, Postgres, dan Aurora

  2. Menggunakan meteor dengan postgresql

  3. tidak dapat membuat ekstensi tanpa peran pengguna super

  4. Indeks GIN PostgreSQL lebih lambat dari GIST untuk pg_trgm?

  5. Bagaimana cara melakukan kueri pemilihan di blok DO?