PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL - Cú pháp DISTINCT ON và GROUP BY

Để có thể chọn tất cả các cột và không chỉ object_idMAX(event_timestamp) , bạn có thể sử dụng DISTINCT ON

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

Nếu bạn muốn kết quả được sắp xếp theo event_timestamp DESC và không phải bởi object_id , bạn cần đưa nó vào bảng dẫn xuất hoặc 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 ;

Ngoài ra, bạn có thể sử dụng các hàm cửa sổ, như 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 ;

hoặc tổng hợp MAX() với 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. Tìm và tính tổng các phạm vi ngày có bản ghi chồng chéo trong postgresql

  2. Chú thích JPA chính xác cho kiểu văn bản của PostgreSQL không có chú thích Hibernate

  3. Hàm tổng hợp tùy chỉnh trong PostgreSQL

  4. Trả về các giá trị không phải dạng số từ cột cơ sở dữ liệu PostgreSQL

  5. chuỗi tạo postgresql không có khoảng cách