如何在这里组合GROUP BY和ORDER BY?

时间:2019-06-24 20:02:35

标签: mysql database

我有一个数据库,其中有一个名为“ messages”的表。列是“发送者”,“接收者”,“主题”,“时间”(时间戳)。

通过查询,我想获得按主题分组的条目。 但是我想将相应的时间设为最新的时间。

例如,如果这是我的数据库:

person1   |   person2   |   hello   |   2019-06-24 20:0**7**:00
person2   |   person1   |   hello   |   2019-06-24 20:0**8**:00

我想要这个:

subject: hello
last entry: 2019-06-24 20:0**8**:00

我无法将ORDER BY放在GROUP BY的前面,所以我尝试了一个子查询:

SELECT subject, sender, receiver, time
FROM 
    (SELECT subject, sender, receiver, time
     FROM messages
     ORDER BY time DESC) AS subselect
GROUP BY subject

但是它不起作用,我不知道为什么。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

我相信这就是您想要的:

SELECT subject,sender,reseiver, MAX(time) AS time FROM messages GROUP BY subject

所以,它是这样的:

  1. 获取相关记录(在本例中为所有记录,因为没有提供WHERE
  2. 通过subject列对它们进行分组,因此现在我们具有相同主题的记录组
  3. 在每个组中,它都寻找time列的最大值-但这是每个组的,所以,我想这就是您想要的

如果您想以某种方式对组进行排序,只需在末尾添加另一个ORDER BY,而无需任何子查询。

答案 1 :(得分:0)

SELECT subject,sender,reseiver,max(time) 
FROM messages
GROUP BY subject,sender,reseiver
ORDER BY max(time) DESC

您还应该按发送者,接收者分组,否则这些列的值不可预测。或完全省略这些列。