MySQL中日期拆分为年月两列时如何按作者分组取最新发布记录ID
解决方案
你原有的查询逻辑只需要做极小的调整即可适配新表结构:核心是将拆分后的year、month字段组合为可比较大小的年月值,替代原来的date字段做最大值判断即可。
方案1:兼容原有逻辑的写法(适配所有MySQL版本)
改动成本最低,和你之前的查询逻辑完全对齐:
SELECT a.id FROM ( SELECT author_id, MAX(`year` * 100 + `month`) as MaxYearMonth FROM `posts_log` GROUP BY author_id ) b INNER JOIN `posts_log` a ON a.author_id = b.author_id AND a.`year` * 100 + a.`month` = b.MaxYearMonth
这里通过year*100 + month把年月转换为类似202104的数值,数值越大代表时间越晚,逻辑和原来直接比较date字段完全一致,返回结果和你期望的输出完全匹配。
方案2:窗口函数写法(适配MySQL 8.0及以上版本)
如果你的数据库支持窗口函数,写法更简洁,大数据量下性能更优:
SELECT id FROM ( SELECT id, ROW_NUMBER() OVER (PARTITION BY author_id ORDER BY `year` DESC, `month` DESC) as rn FROM `posts_log` ) t WHERE rn = 1
逻辑是给每个作者的所有记录按时间倒序排序,直接取排名第一的记录id即可。
内容的提问来源于stack exchange,提问作者Mike_debugger
相关产品推荐
相关产品推荐

