Roughly, bạn muốn một cái gì đó như
select min_trans_time, min_trans.id as min_trans_time_id,
max_trans_time, max_trans.id as max_trans_time_id
from (
select trans_date,
max(trans_time) as max_trans_time,
min(trans_time) as min_trans_time,
from trans
group by trans_date) min_max_trans,
trans as min_trans,
trans as max_trans
where min_trans.trans_time = min_max_trans.min_trans_time
and max_trans.trans_time = min_max_trans.max_trans_time
Điều này có thể không ổn định nếu một số trans
es chia sẻ giống nhau trans_time
(nghĩa là chạy truy vấn trên cùng một bộ dữ liệu có thể mang lại kết quả khác nhau. Một cách dễ dàng để giải quyết vấn đề này, nếu đó là một mối quan tâm, là chọn id tối đa hoặc tối thiểu, ví dụ. Tất nhiên, điều này có thể làm sai lệch kết quả :).
Bạn cũng có thể sử dụng Hàm cửa sổ nếu bạn đang sử dụng PostgreSQL 8.4 trở lên; họ sẽ cung cấp một truy vấn rõ ràng hơn (rõ ràng nếu bạn quen thuộc với các chức năng của cửa sổ :) và họ cho phép bạn thực hiện những công việc khá khó thực hiện với chiến lược trên (ví dụ: lấy giá trị cao thứ 2 thay vì tối đa). Tuy nhiên, theo kinh nghiệm ngắn ngủi của tôi, họ thực hiện kém hơn so với phương pháp tự tham gia mà tôi đề xuất ở đây. Câu trả lời của Erwin chứa một phiên bản của truy vấn bằng các hàm cửa sổ. Sẽ rất thú vị khi lưu ý truy vấn nào thực thi tốt hơn và / hoặc có thể được tối ưu hóa tốt hơn (bằng cách thêm các chỉ mục, v.v.).