Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql - requête pour la liste des threads de messages avec des conditions spécifiques

Vous voulez le maximum par groupe , que vous pouvez trouver en joignant les Messages table à une sous-requête qui identifie l'horodatage d'identification (maximal) pour chaque groupe :

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

Voir sur sqlfiddle .

Notez que l'ordre de mon jeu de résultats diffère de celui attendu dans votre question pour les raisons mises en évidence dans mon commentaire ci-dessus :