Możesz użyć takiego zapytania:
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)
(lub możesz użyć innej funkcji zagregowanej dla tekstu, takiej jak group_concat, albo musisz dwukrotnie dołączyć do nazwy tabeli, aby otrzymać pierwszą lub ostatnią wiadomość z czatu, ale to zależy od tego, co chcesz zwrócić)