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

如何在按nmonth分组的列中仅返回过去两个月的数据

问题分析与解决办法

为啥你的过滤逻辑失效?

你现在的写法只盯着月份数字对比,完全没考虑年份,而且条件本身逻辑就不对:

  • 比如现在是2024年1月,两个月前是2023年11月,Month(Now())是1,Month(DateAdd("m",-2,Now()))是11,1≠11,这个条件永远不成立,加进去之后自然没数据。
  • 用Between的话,如果你只传月份数字,比如当前是1月,写Between Month(DateAdd("m",-2,Now())) And Month(Now())就变成Between 11 And 1,数值范围从大到小,数据库识别不出有效区间,也查不到数据。

另外你之前能拿到上个月数据,其实是运气好——如果你的数据里只有今年的上个月,哪怕漏了年份判断,也能凑巧返回结果,但这个写法本身不严谨(比如去年的同月份数据也会被拉出来)。

正确的过滤写法

分两种情况处理,看你的nmonth是什么格式:

情况1:nmonth是日期类型(比如存的是每月1号)

直接筛选日期范围,精准覆盖过去两个月:

nmonth >= DateSerial(Year(DateAdd("m", -2, Now())), Month(DateAdd("m", -2, Now())), 1) 
AND 
nmonth <= DateSerial(Year(DateAdd("m", -1, Now())), Month(DateAdd("m", -1, Now())), Day(DateSerial(Year(DateAdd("m", -1, Now())), Month(DateAdd("m", -1, Now())) + 1, 0)))

简单说就是:取两个月前当月的第一天到上个月当月的最后一天之间的所有数据。

情况2:nmonth是YYYYMM格式(比如202401代表2024年1月)

把过去两个月的年月转成相同格式,直接判断nmonth是否在这两个值里:

nmonth IN (
    Year(DateAdd("m", -1, Now())) * 100 + Month(DateAdd("m", -1, Now())),
    Year(DateAdd("m", -2, Now())) * 100 + Month(DateAdd("m", -2, Now()))
)

如果nmonth是日期类型,也可以用年份+月份拼接的方式判断:

(Year(nmonth)*100 + Month(nmonth)) IN (
    Year(DateAdd("m", -1, Now())) * 100 + Month(DateAdd("m", -1, Now())),
    Year(DateAdd("m", -2, Now())) * 100 + Month(DateAdd("m", -2, Now()))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:42:43