我有一个名为“message”的表,用于存储一个用户发送给另一个用户的消息。我想创建一个消息盒子,其中包含特定用户的收件和发件消息。这个消息盒子应该包含两个用户之间的最后一条消息。因此,我必须消除两个用户之间的重复消息。我尝试使用
我的消息表:
我的SQL中的"Group By"语句
在上面的例子中,我想选择第二个和第四个消息。
有没有一种方法可以在结果中消除两个用户之间的重复消息?
编辑:我已经改进了示例。
group by
来消除重复消息,但是我无法选择最新的消息,因为order by
在group by
之后工作。我尝试使用distinct
函数来消除重复消息。它运行良好,但我必须选择所有列,这在distinct
中不可能实现。我的消息表:
+-------+---------+------+-----+------------+
| id | from_id | to_id| text| created_at |
+-------+---------+------+-----+------------+
| 1 | 1 | 2 | mes | 2014-01-16 |
| 2 | 2 | 1 | mes | 2014-01-17 |
| 3 | 1 | 3 | mes | 2014-01-18 |
| 4 | 3 | 1 | mes | 2014-01-19 |
+-------+---------+------+-----+------------+
我的SQL中的"Group By"语句
SELECT * FROM message WHERE (from_id = 1 OR to_id = 1) GROUP BY(from_id + to_id) ORDER BY created_at DESC;
关键字 Distinct
SELECT DISTINCT(from_id + to_id) FROM message WHERE (from_id = 1 OR to_id = 1)
在上面的例子中,我想选择第二个和第四个消息。
有没有一种方法可以在结果中消除两个用户之间的重复消息?
编辑:我已经改进了示例。
GROUP BY
。除非你选择使用像MIN()或MAX()这样的聚合函数,否则它没有任何意义。 - O. Jones