Đâ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