鉴于此表:
表格消息
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
这是最后的消息,它们按日期排序。
如何检索我想要的数据?
答案 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
不适合此查询。你没有聚合任何东西。