MS Access SQL查询需求:基于月份偏移量的3个月滚动求和
MS Access实现3个月滚动求和的SQL方案
核心逻辑
基于MonthOffset(即你所说的Column A)的数值范围筛选记录:对每条记录,计算其MonthOffset到MonthOffset-2之间所有记录的数值和,不管月份是否连续,缺失的月份因无对应记录会自动被排除在求和外。
实现代码
假设你的表名为SalesData,偏移量列是MonthOffset,需要求和的数值列是Amount,替换成你实际的表名和列名即可:
SELECT main.MonthOffset, main.Amount, SUM(sub.Amount) AS Rolling3MonthSum FROM SalesData main LEFT JOIN SalesData sub ON sub.MonthOffset BETWEEN (main.MonthOffset - 2) AND main.MonthOffset GROUP BY main.MonthOffset, main.Amount ORDER BY main.MonthOffset;
代码说明
- 自连接筛选范围:通过自连接,让每条主表记录关联子表中偏移量在当前记录偏移量前2个月到当前月的所有记录
- 分组求和:按主表的
MonthOffset和Amount分组,对子表的Amount求和得到滚动3个月的总和 - 处理缺失月份:如果某月份没有记录,子表中不会有对应行,求和时自然不会计入,完全符合你要求的“缺失月份不影响结果”的场景
比如你提到的例子:假设2022年9月的MonthOffset是-4,缺失的8月对应-5,那么求和范围是-4-2=-6到-4,只要这个区间内存在的记录数值总和是10,结果就会显示10,不管中间有没有缺失的月份。
内容的提问来源于stack exchange,提问作者Selva
相关产品推荐
相关产品推荐

