Du kan använda en fråga som denna:
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)
(eller så kan du använda en annan aggregerad funktion för texten, som group_concat, eller så måste du gå med i tabellnamn två gånger för att få det första eller sista meddelandet i chatten, men detta beror på vad du vill returnera)