我有一个“消息”表,用于存储一段时间内发送给人们的关于某些项目的消息。
messages表的结构是:
message_id 用户身份 发送日期 created_at
对于每个用户,我可以在表中有多个元组。 这些消息有些已经发送,有些还没有发送。
我正在尝试为每个用户获取最后创建的消息。 我正在使用 max(created_at) 和 group_by(user_id),但关联的 message_id 不是与 max(created_id) 元组关联的那个。
表格数据:
message_id | user_id | date_sent | created_at
----------------------------------------------
1 1 2021-07-01 2021-07-01
2 1 2021-07-02 2021-07-02
3 2 2021-07-01 2021-07-01
4 3 2021-07-04 2021-07-04
5 1 2021-07-22 2021-07-22
6 1 NULL 2021-07-23
7 2 NULL 2021-07-29
8 1 NULL 2021-07-29
9 3 2021-07-29 2021-07-29
我的选择:
select * from messages ma right join
( SELECT max(mb.created_at),message_id
FROM `messages` mb WHERE mb.created_at <= '2021-07-24'
group by user_id)
mc on ma.message_id=mc.message_id
结果是
message_id | user_id | date_sent | created_at
----------------------------------------------
5 1 2021-07-22 2021-07-23
3 2 2021-07-01 2021-07-01
4 3 2021-07-04 2021-07-04
我不知道为什么,但是对于用户 1,返回的 message_id 不是与具有 max(created_at) 的元组关联的那个。
我期望是:(获取按 user_id 分组的 select 的 max(date_sent) 元组)
message_id | user_id | date_sent | created_at
----------------------------------------------
6 1 NULL 2021-07-23
3 2 2021-07-01 2021-07-01
4 3 2021-07-04 2021-07-04
有什么想法吗?有什么帮助吗? 谢谢。