Prova questo:
seleziona *dai messaggi mdove non esiste (seleziona 1da messaggi mmdove (mm.dautente =m.dautente o mm.dautente =m.dautente) AND (mm.dautente =m.dautente o mm.dautente =m.dautente) e mm.timestamp>
m.timestamp) e m.fromuser ='user1' o m.touser ='user1';
Probabilmente sarebbe meglio, andando avanti, contrassegnare le conversazioni tra due utenti come una conversazione particolare, quindi ogni messaggio appartiene a una conversazione, e quindi diventa molto più facile trovare conversazioni in cui l'utente è coinvolto e informazioni sui messaggi relativi al conversazione. Comunque.
Prova invece questo. Uffa.
select m.*
from messages m
left join messages m2
on ((m.fromuser = m2.fromuser and m.touser = m2.touser)
or (m.fromuser = m2.touser and m.touser = m2.fromuser))
and m.timestamp < m2.timestamp
where (m.fromuser = 'user1' or m.touser = 'user1')
and m2.id is null;
È probabile che sia superiore a not exists
versione, anche se riesco a risolverlo.
questo violino funziona davvero