MySQL如何查询父级关联版本中最新logged_at且item_id最小的记录
解法1:使用窗口函数(适配你提到的row_number思路)
你的需求本质是做两级排序取第一条:优先按logged_at倒序(最新的排最前),相同时间下按item_id升序(最小的排最前),直接在row_number的排序规则里定义两级排序即可:
SELECT id, item_id, logged_at, parent_id FROM ( SELECT *, -- 先按时间倒序,再按item_id正序排序 ROW_NUMBER() OVER (ORDER BY logged_at DESC, item_id ASC) AS rn FROM version -- 如果需要限定特定parent,可取消下一行注释 -- WHERE parent_id = 1 ) AS sorted_version WHERE rn = 1;
解法2:子查询实现(逻辑更直观)
分两步筛选:先拿到最大的logged_at值,再在符合该时间的记录里取最小item_id的第一条:
SELECT * FROM version WHERE logged_at = (SELECT MAX(logged_at) FROM version) -- 如果需要限定特定parent,可加条件 AND parent_id = 1 ORDER BY item_id ASC LIMIT 1;
结果验证
针对你给出的示例数据,两种写法都会返回id为3的记录,完全符合预期:
| id | item_id | logged_at | parent_id |
|---|---|---|---|
| 3 | 1 | 2021-12-01 21:40:00 | 1 |
内容的提问来源于stack exchange,提问作者Trip
相关产品推荐
相关产品推荐

