Bạn muốn có tối đa theo nhóm
, có thể được tìm thấy bằng cách tham gia Messages
bảng tới một truy vấn con xác định dấu thời gian nhận dạng (tối đa) cho mỗi nhóm:
SELECT Message.request_id,
Sender.username AS sender_name,
Receiver.username AS receiver_name,
Message.message AS last_message,
Message.timestamp AS last_timestamp
FROM Message NATURAL JOIN (
SELECT request_id,
sender_id,
receiver_id,
MAX(timestamp) timestamp
FROM Message
GROUP BY request_id, sender_id, receiver_id
) t
JOIN User Sender ON Sender.id = Message.sender_id
JOIN User Receiver ON Receiver.id = Message.receiver_id
ORDER BY Message.request_id, last_timestamp DESC
Xem nó trên sqlfiddle .
Lưu ý rằng thứ tự tập kết quả của tôi khác với thứ tự mong đợi trong câu hỏi của bạn vì những lý do được đánh dấu trong nhận xét của tôi ở trên :