Podría utilizar una consulta como esta:
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)
(o puede usar otra función agregada para el texto, como group_concat, o tiene que unirse a tablename dos veces para obtener el primer o el último mensaje del chat, pero esto depende de lo que quiera devolver)