Tôi đang cố gắng viết một truy vấn trong Postgresql để lấy một tập dữ liệu được sắp xếp và lọc nó theo một trường riêng biệt. Tôi cũng cần phải kéo một số lĩnh vực khác từ cùng một hàng bảng, nhưng họ cần phải được bỏ ra khỏi đánh giá riêng biệt. Ví dụ:Sử dụng mệnh đề DISTINCT để lọc dữ liệu nhưng vẫn kéo các trường khác không phải là DISTINCT
SELECT DISTINCT(user_id) user_id,
created_at
FROM creations
ORDER BY created_at
LIMIT 20
Tôi cần user_id
là DISTINCT
, nhưng không quan tâm cho dù ngày created_at là duy nhất hay không. Bởi vì ngày created_at được đưa vào đánh giá, tôi nhận được bản sao user_id
trong tập kết quả của mình.
Ngoài ra, dữ liệu phải được sắp xếp theo ngày, do đó, sử dụng DISTINCT ON
không phải là một tùy chọn tại đây. Nó yêu cầu trường DISTINCT ON
là trường đầu tiên trong mệnh đề ORDER BY
và điều đó không cung cấp kết quả mà tôi tìm kiếm.
Làm cách nào để sử dụng đúng điều khoản DISTINCT
nhưng giới hạn phạm vi của nó thành chỉ một trường trong khi vẫn chọn các trường khác?
Khái niệm 'DISTINCT' vốn đã áp dụng cho tất cả các cột được chọn vì nếu không sẽ có một tập hợp vốn có ... do đó chức năng' GROUP'. Bạn đang xem loại kết quả nào? Bạn có thể đưa ra một ví dụ về những gì dữ liệu có thể nắm giữ và kết quả bạn muốn? – Matthew
Điều thú vị (và không liên quan đến câu trả lời) là tôi đã chạy qua nỗ lực trên để có 'DISTINCT (cột1), cột2' hoạt động trên một cột đơn. Tuy nhiên, các cơ sở dữ liệu phân tích nó thành 'DISTINCT column1, column2' - may mắn cho bạn nó trả về kết quả sai - nếu không nó có thể đã cắn bạn nhiều hơn sau đó (lần đầu tiên tôi thấy nó nằm trong cơ sở dữ liệu sản xuất). – Unreason
"dữ liệu phải được sắp xếp theo ngày" - ** mà ** ngày? Ngày created_at sớm nhất cho mỗi người dùng? Mới nhất? Thứ gì khác? –