Truy vấn ngắn nhất (và có thể nhanh nhất) sẽ là DISTINCT ON
, một phần mở rộng PostgreSQL của tiêu chuẩn SQL DISTINCT
mệnh đề:
SELECT DISTINCT ON (1)
id, count, year
FROM tbl
ORDER BY 1, 2 DESC, 3;
Các số chỉ vị trí thứ tự trong SELECT
danh sách. Bạn có thể đánh vần tên cột cho rõ ràng:
SELECT DISTINCT ON (id)
id, count, year
FROM tbl
ORDER BY id, count DESC, year;
Kết quả được sắp xếp theo id
vv mà có thể được hoặc có thể không được chào đón. Nó tốt hơn là "không xác định" trong mọi trường hợp.
Nó cũng phá vỡ mối quan hệ (khi nhiều năm có cùng số lượng tối đa) theo một cách được xác định rõ:chọn năm sớm nhất. Nếu bạn không quan tâm, hãy bỏ year
từ ORDER BY
. Hoặc chọn năm mới nhất với year DESC
.
Đối với nhiều hàng trên mỗi id
, các kỹ thuật truy vấn khác (nhiều) nhanh hơn. Xem:
- Chọn trước hàng trong mỗi GROUP BY nhóm?
- 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