Můžete použít dotaz jako tento:
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)
(nebo můžete pro text použít jinou agregovanou funkci, jako group_concat, nebo se musíte připojit název tabulky dvakrát, abyste získali první nebo poslední zprávu chatu, ale záleží na tom, co chcete vrátit)