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

PostgreSQL CHẨN ĐOÁN BẬT với các ĐẶT HÀNG KHÁC BỞI

Tài liệu cho biết:

DISTINCT ON (biểu thức [, ...]) chỉ giữ hàng đầu tiên của mỗi tập hợp các hàng trong đó các biểu thức đã cho đánh giá là bằng nhau. [...] Lưu ý rằng "hàng đầu tiên" của mỗi tập hợp là không thể đoán trước được trừ khi ORDER BY được sử dụng để đảm bảo rằng hàng mong muốn xuất hiện trước. [...] (Các) biểu thức DISTINCT ON phải khớp với (các) biểu thức ORDER BY ngoài cùng bên trái.

Tài liệu chính thức

Vì vậy, bạn sẽ phải thêm address_id đặt hàng trước.

Ngoài ra, nếu bạn đang tìm kiếm toàn bộ hàng có chứa sản phẩm được mua gần đây nhất cho mỗi address_id và kết quả đó được sắp xếp theo purchased_at thì bạn đang cố gắng giải quyết vấn đề N lớn nhất cho mỗi nhóm có thể được giải quyết bằng các cách tiếp cận sau:

Giải pháp chung sẽ hoạt động trong hầu hết các DBMS:

SELECT t1.* FROM purchases t1
JOIN (
    SELECT address_id, max(purchased_at) max_purchased_at
    FROM purchases
    WHERE product_id = 1
    GROUP BY address_id
) t2
ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at
ORDER BY t1.purchased_at DESC

Một giải pháp định hướng PostgreSQL hơn dựa trên câu trả lời của @ hkf:

SELECT * FROM (
  SELECT DISTINCT ON (address_id) *
  FROM purchases 
  WHERE product_id = 1
  ORDER BY address_id, purchased_at DESC
) t
ORDER BY purchased_at DESC

Vấn đề được làm rõ, mở rộng và giải quyết tại đây:Chọn các hàng được sắp xếp theo một số cột và phân biệt trên một cột khác



  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 JDBC Null String được coi là một trang web tạm thời

  2. Cách Cosd () hoạt động trong PostgreSQL

  3. SpringBoot + Kotlin + Postgres và JSONB:org.hibernate.MappingException:Không có ánh xạ phương ngữ cho loại JDBC

  4. Cách thay đổi mã hóa bộ sưu tập cơ sở dữ liệu mẫu

  5. Cách thoát chuỗi khi khớp mẫu trong PostgreSQL