You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:30:00