Như đã đề cập trong phần nhận xét cho câu trả lời của Robin
, cách tiếp cận đó không đáng tin cậy vì MySQL không đảm bảo rằng nó sẽ luôn trả về trạng thái gần đây nhất từ mỗi nhóm. Thay vào đó, bạn phải tham gia vào bảng của mình bằng một truy vấn con chọn trạng thái gần đây nhất (dựa trên addedDate
).
SELECT *
FROM status
NATURAL JOIN (
SELECT userID, MAX(addedDate) as addedDate
FROM status
GROUP BY userID
) AS mostRecent
ORDER BY addedDate DESC
LIMIT 10
Lưu ý rằng nếu người dùng có nhiều bản cập nhật trạng thái với cùng một addedDate
, máy chủ sẽ trả về tất cả chúng (trong khi truy vấn của Robin sẽ trả về một truy vấn không xác định); nếu bạn cần kiểm soát một tình huống như vậy, bạn sẽ cần phải xác định cách xác định xem bản cập nhật trạng thái nào sẽ được chọn.