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

SQL Server递归DATEADD查询获取近N年相同日期问题求解

SQL Server递归查询返回最近N年同一日期的调整方案

原代码问题分析

原递归逻辑的日期计算规则错误:递归分支中使用上层递归的step值作为年偏移量叠加上层返回的日期,不仅会出现重复的基准日期,最终输出的日期序列也完全不符合预期。

调整后代码

declare @N int = 4; -- 自定义要返回的最近N年数值
declare @datobserve date = '2021-11-03';

with dates as 
(
-- 锚点成员:基准日期作为初始值
select @datobserve datobserve, 0 step
union all
-- 递归成员:直接给上一轮日期减1年
select dateadd(year, -1, datobserve) as datobserve, step - 1
from dates
-- 终止条件:保证返回N条数据
where step > -@N + 1
)
select datobserve from dates

逻辑说明

  • 将年数封装为@N变量,调整需求时仅需修改该变量即可,无需改动其他逻辑
  • 锚点直接取基准日期,不需要额外做日期计算
  • 递归分支每次给上一轮生成的日期减1年,保证每年都是同一月日
  • 以@N=4为例,最终会返回2021-11-03、2020-11-03、2019-11-03、2018-11-03共4条符合要求的数据

特殊场景说明

如果基准日期是闰年的2月29日,SQL Server的dateadd函数会自动将非闰年的对应日期调整为2月28日,符合绝大多数业务场景的预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:02