Vous pouvez utiliser une requête comme celle-ci :
select
min(id) as id,
least(sender,recipient) as sender,
greatest(sender,recipient) as recipient
min(text) as text
from
tablename
group by
least(sender,recipient),
greatest(sender,recipient)
(ou vous pouvez utiliser une autre fonction agrégée pour le texte, comme group_concat, ou vous devez joindre tablename deux fois pour obtenir le premier ou le dernier message du chat, mais cela dépend de ce que vous voulez renvoyer)