Изпробвайте това:
изберете *от съобщения, където не съществува (изберете 1 от съобщения mm, където (mm.fromuser =m.fromuser или mm.fromuser =m.touser) И (mm.touser =m.touser или mm.touser =m.fromuser) и mm.timestamp>
m.timestamp)и m.fromuser ='user1' или m.touser ='user1';
демо тук .
Вероятно би било по-добре в бъдеще да маркирате разговорите между двама потребители като конкретен разговор, тогава всяко съобщение принадлежи на разговор и по този начин става много по-лесно да намерите разговори, в които потребителят участва, и информация за съобщения, свързани с разговор. Както и да е.
Опитайте този вместо това. Уф.
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;
Вероятно е по-добро от not exists
версия, дори и да успея да я поправя.