【发布时间】:2020-12-25 21:51:56
【问题描述】:
我有数据库来存储客户和消息
我正在尝试获取所有客户的列表及其最新消息,例如 Messenger 中的第一个屏幕。
SELECT *
FROM message AS m
LEFT JOIN customer AS c ON c.id=m.sender_id
ORDER BY m.sent_at DESC
但这会返回所有用户的所有消息。我也试过这样做
SELECT *
FROM message AS m
LEFT JOIN customer AS c ON c.id=m.sender_id
GROUP BY c.id
但这并不能在所有数据库上运行,并且不能对结果集进行排序以仅获取最新消息。
【问题讨论】:
-
以表格格式提供样本数据和您想要的输出
-
如果某些用户没有消息怎么办?这个用户必须返回 NULL 还是根本不能返回?您使用 LEFT 加入 - 您是否有属于不存在用户的消息?
-
如果用户没有消息不应该返回。我应该使用 Inner Join,这是错误的问题。
标签: mysql sql datetime greatest-n-per-group window-functions