with last_msg as ( select sender, receiver, max(sending_time) as sending_time from messages group by sender, receiver) select sender, receiver, max(sending_time) as sending_time from (select sender, receiver, sending_time from last_msg union all select receiver, sender, sending_time from last_msg) t group by sender, receiver