以下是包含用户已发送给彼此的消息的表的摘录。
id | from_user | to_user | time
---+-----------+---------+--------------------
1 | 2 | 1 | 2016-01-03 01:22:14
2 | 1 | 2 | 2016-01-03 01:26:20
3 | 2 | 3 | 2016-01-03 01:27:39
4 | 1 | 3 | 2016-01-03 08:15:11
5 | 1 | 2 | 2016-01-03 09:44:51
6 | 2 | 3 | 2016-01-03 10:13:13
7 | 3 | 1 | 2016-01-03 11:29:19
8 | 3 | 2 | 2016-01-03 14:54:41
鉴于此表,我想为每个from_user / to_user组合选择最新的行,无论用户1是否向用户2发送了消息,反之亦然。因此上述情况的结果应如下所示:
id | from_user | to_user | time
---+-----------+---------+--------------------
5 | 1 | 2 | 2016-01-03 09:44:51
7 | 3 | 1 | 2016-01-03 11:29:19
8 | 3 | 2 | 2016-01-03 14:54:41
到目前为止,我尝试使用以下查询从用户表创建笛卡尔积:
SELECT a.id, b.id
FROM user a, user b
WHERE a.id < b.id
这很好但现在我完全不知道如何利用它来遍历“messages”表并检索每个用户组合的最新行。
我非常感谢任何帮助。