Tôi có dữ liệu mà trông như thế này:Làm cách nào để tham gia hàng gần đây nhất trong một bảng đến một bảng khác?
entities
id name
1 Apple
2 Orange
3 Banana
Định kỳ, một quá trình sẽ chạy và cho điểm cho từng đối tượng. Quá trình này tạo ra các dữ liệu và thêm nó vào một bảng điểm như sau:
scores
id entity_id score date_added
1 1 10 1/2/09
2 2 10 1/2/09
3 1 15 1/3/09
4 2 10 1/03/09
5 1 15 1/4/09
6 2 15 1/4/09
7 3 22 1/4/09
Tôi muốn để có thể chọn tất cả các thực thể cùng với số điểm ghi nhận gần đây nhất cho mỗi kết quả là một số dữ liệu như thế này:
entities
id name score date_added
1 Apple 15 1/4/09
2 Orange 15 1/4/09
3 Banana 15 1/4/09
tôi có thể lấy dữ liệu cho một thực thể duy nhất sử dụng truy vấn này:
SELECT entities.*,
scores.score,
scores.date_added
FROM entities
INNER JOIN scores
ON entities.id = scores.entity_id
WHERE entities.id = ?
ORDER BY scores.date_added DESC
LIMIT 1
Nhưng tôi đang ở một mất mát về cách chọn giống nhau cho tất cả các thực thể. Có lẽ nó đang nhìn chằm chằm vào mặt tôi?
Cảm ơn bạn rất vui vì đã dành thời gian.
Cảm ơn các câu trả lời tuyệt vời. Tôi sẽ cung cấp cho nó một vài ngày để xem nếu một giải pháp ưa thích bong bóng lên sau đó tôi sẽ chọn câu trả lời.
CẬP NHẬT: Tôi đã thử một số giải pháp được đề xuất, vấn đề chính mà tôi đang gặp phải là nếu một thực thể chưa có số điểm được tạo, chúng sẽ không xuất hiện trong danh sách.
SQL sẽ trông như thế nào để đảm bảo rằng tất cả các thực thể được trả lại, ngay cả khi chúng chưa có điểm số nào được đăng?
CẬP NHẬT: Đã chọn câu trả lời. Cảm ơn mọi người!
Cảm ơn Bill, tôi đã kết thúc giải quyết giải pháp này nhưng đổi chỗ INNER JOIN cho LEFT JOIN để bao gồm các thực thể chưa có điểm số. – GloryFish
Tôi thích giải pháp này, tôi cũng đang sử dụng LEFT JOIN. Làm thế nào bạn sẽ đề nghị đối phó với một tie, trong trường hợp có hai điểm cho cùng một thực thể với cùng một ngày? – russds
@russds, sử dụng cột khác để giải quyết các mối quan hệ. –