如何根据Accounts_Messages表的id对Accounts表结果排序?
解决方案
要实现按最后一条消息排序接收消息的用户,核心是先找到每个接收者对应的最新消息,再关联用户表排序。以下是具体SQL语句及逻辑说明:
SQL 语句
SELECT a.name FROM Accounts a JOIN ( -- 子查询:获取每个接收者收到的最新消息ID(消息ID递增,最大ID即为最后一条) SELECT receiver_id, MAX(id) AS latest_msg_id FROM Accounts_Messages WHERE sender_id = 1 -- 筛选James发送的消息,可根据实际场景调整 GROUP BY receiver_id ) msg ON a.id = msg.receiver_id ORDER BY msg.latest_msg_id DESC;
逻辑说明
- 子查询部分:从
Accounts_Messages中筛选目标发送者(示例中为James,sender_id=1)的所有消息,按receiver_id分组,通过MAX(id)拿到每个接收者对应的最后一条消息ID。 - 关联用户表:将
Accounts表与子查询结果通过用户ID关联,匹配到对应的用户名称。 - 排序输出:按子查询中的
latest_msg_id降序排列,即可得到「Roberto、Kirk、Lars」的期望顺序。
内容的提问来源于stack exchange,提问作者Jesse Gaspar
相关产品推荐
相关产品推荐

