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

如何获取数据表中当前月份的滚动12个月记录?

如何筛选最新月份过去12个月的记录

要实现这个需求,核心是两步:先找到数据表中的最新月份,再计算出这个月份往前推12个月的起始值,最后筛选出落在这个区间内的记录。下面分步骤给你具体的实现方案,适配主流数据库:

步骤1:确定最新月份

首先我们需要从表中获取最大的Month值(也就是最新的月份),用聚合函数MAX()就能快速拿到:

SELECT MAX(Month) FROM your_table_name;

步骤2:计算过去12个月的起始月份

因为Month是YYYYMM格式的数字,直接做数值运算容易出错(比如201801减12会得到201789,显然不对),所以最好先把它转换成日期类型,再做月份偏移,最后转回YYYYMM格式。

针对MySQL的实现

-- 先获取最新月份并计算起始月份,再筛选数据
SELECT ID, Month
FROM your_table_name
WHERE Month >= (
    SELECT DATE_FORMAT(DATE_SUB(STR_TO_DATE(CONCAT(MAX(Month), '01'), '%Y%m%d'), INTERVAL 12 MONTH), '%Y%m')
    FROM your_table_name
);

解释:

  • STR_TO_DATE(CONCAT(MAX(Month), '01'), '%Y%m%d'):把YYYYMM的数字转换成具体日期(比如201804变成2018-04-01)
  • DATE_SUB(..., INTERVAL 12 MONTH):将日期往前推12个月,得到2017-04-01
  • DATE_FORMAT(..., '%Y%m'):把日期转回YYYYMM格式的字符串(或数字)

针对SQL Server的实现

SELECT ID, Month
FROM your_table_name
WHERE Month >= (
    SELECT CONVERT(VARCHAR(6), DATEADD(MONTH, -12, CAST(CONCAT(MAX(Month), '01') AS DATE)), 112)
    FROM your_table_name
);

解释:

  • CAST(CONCAT(MAX(Month), '01') AS DATE):将YYYYMM格式的数字转为日期类型
  • DATEADD(MONTH, -12, ...):给日期减去12个月
  • CONVERT(VARCHAR(6), ..., 112):把日期重新转成YYYYMM格式的字符串

针对PostgreSQL的实现

SELECT ID, Month
FROM your_table_name
WHERE Month >= (
    SELECT TO_CHAR((TO_DATE(MAX(Month)::TEXT, 'YYYYMM') - INTERVAL '12 months'), 'YYYYMM')::INT
    FROM your_table_name
);

解释:

  • TO_DATE(MAX(Month)::TEXT, 'YYYYMM'):将数字类型的Month转为日期格式
  • INTERVAL '12 months':给日期减去12个月
  • TO_CHAR(..., 'YYYYMM')::INT:把日期转回YYYYMM格式的整数

验证你的示例数据

你的示例数据表中,最新月份是201804,往前推12个月得到201704,所以筛选条件是Month >= 201704,对应记录ID1(201803)、ID2(201804)、ID3(201704)都符合条件,和你给出的预期输出一致(注:你的示例中ID4的Month是201706,其实也在这个区间内,如果预期输出没包含它,可能是示例笔误哦)

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:46:26