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

在SQL Server中按不同ID的时间区间生成周末(周六)结束日期

SQL Server 按ID生成对应时间范围所有周六日期方案

实现逻辑

  • 利用递归CTE生成每个ID时间范围内的连续周日期序列,不需要额外依赖日期维度表
  • 自带周六校验逻辑,兼容不同SQL Server实例的周起始日配置

完整实现代码

-- 替换下方的YourSourceTable为你实际存储ID、minDate、MaxDate的源表名
WITH GenerateWeekends AS (
    -- 锚点:取每个ID的最小日期作为起始值
    SELECT 
        ID,
        minDate AS WeekEndDate,
        MaxDate
    FROM YourSourceTable

    UNION ALL

    -- 递归:每次加7天,直到超出当前ID的最大日期限制
    SELECT 
        ID,
        DATEADD(DAY, 7, WeekEndDate),
        MaxDate
    FROM GenerateWeekends
    WHERE DATEADD(DAY, 7, WeekEndDate) <= MaxDate
)

SELECT 
    ID,
    WeekEndDate
FROM GenerateWeekends
-- 通用周六校验,不依赖实例@@DATEFIRST配置
WHERE DATENAME(WEEKDAY, WeekEndDate) = 'Saturday'
ORDER BY ID, WeekEndDate

-- 若单ID时间跨度超过100周,取消下一行注释放开递归限制
-- OPTION (MAXRECURSION 0)

特殊场景适配

  • 如果你源表中存在minDate不是周六的情况,只需要将锚点部分的minDate AS WeekEndDate替换为以下逻辑,即可自动取时间范围内的第一个周六作为起始:
    DATEADD(DAY, (7 - DATEPART(WEEKDAY, minDate) + @@DATEFIRST) % 7, minDate) AS WeekEndDate

示例返回结果(以ID=102为例)

ID   WeekEndDate
---------------------
102  2021-08-07
102  2021-08-14
102  2021-08-21

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:57:00