如何分组并显示mysql中的第一个数据?

时间:2017-08-22 14:14:59

标签: mysql sql

鉴于此表:

表格消息

id | conversation_id | user_id | message | created_at
-----------------------------------------------------
1  |       1         |   1     |   hello | 2017-05-09 
2  |       1         |   2     |   hi    | 2017-05-10
3  |       2         |   2     |   me    | 2017-05-11 
4  |       2         |   3     |   oh    | 2017-05-12 
5  |       1         |   1     |   okay  | 2017-05-13 

我想获取所有“第一”消息的列表,因此我的预期结果是

id | conversation_id | user_id | message | created_at
-----------------------------------------------------
1  |       1         |   1     |   hello | 2017-05-09 
3  |       2         |   2     |   me    | 2017-05-11 

目前我有这个问题:

select * from messages group by conversation_id ORDER BY  created_at desc
然而,这将返回:

id | conversation_id | user_id | message | created_at
-----------------------------------------------------
5  |       1         |   1     |   okay  | 2017-05-13 
4  |       2         |   3     |   oh    | 2017-05-12 

这是最后的消息,它们按日期排序。

如何检索我想要的数据?

1 个答案:

答案 0 :(得分:4)

以下是获取第一条消息的一种方法:

select m.*
from messages m
where m.created_at = (select min(m2.created_at) from messages m2 where m2.conversation_id = m.conversation_id);

GROUP BY不适合此查询。你没有聚合任何东西。