Đây là một trường hợp sử dụng hoàn hảo cho DISTINCT ON
- một phần mở rộng cụ thể của Postgres của DISTINCT
tiêu chuẩn :
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Cẩn thận với thứ tự sắp xếp giảm dần. Nếu cột có thể là NULL, bạn có thể muốn thêm NULLS LAST
:
- Sắp xếp theo ASC cột, nhưng giá trị NULL trước?
DISTINCT ON
là đơn giản và nhanh chóng. Giải thích chi tiết trong câu trả lời liên quan này:
- Chọn hàng đầu tiên trong mỗi GROUP BY nhóm?
Đối với các bảng lớn có nhiều hàng trên mỗi category
xem xét một cách tiếp cận thay thế:
- Tối ưu hóa truy vấn GROUP BY để truy xuất hàng mới nhất cho mỗi người dùng
- Tối ưu hóa truy vấn tối đa theo nhóm