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

如何基于当前日期为日期维度表的日期字段计算对应偏移量

方案1:直接使用日期差值计算(推荐)

你要实现的偏移本质是指定基准日和各日期的天数差,无需窗口函数即可实现,逻辑更简洁性能更好:

-- 以下为SQL Server语法,其他数据库仅需调整日期函数参数顺序即可
SELECT 
    actualDate,
    DATEDIFF(day, '2021-09-24', CAST(actualDate AS DATE)) AS dateOffset
FROM (
    VALUES ('2021-09-20')
    ,      ('2021-09-21')
    ,      ('2021-09-22')
    ,      ('2021-09-23')
    ,      ('2021-09-24')
    ,      ('2021-09-25')
    ,      ('2021-09-26')
    ,      ('2021-09-27')
    ,      ('2021-09-28')
) as t(actualDate)

如果需要基准日动态生效(每日运行时自动取昨日为0),把固定基准日'2021-09-24'替换为CAST(DATEADD(day,-1,GETDATE()) AS DATE)即可。


方案2:窗口函数实现

如果你明确需要用窗口函数实现,可以先给日期排序取行号,再用行号减去基准日对应的行号得到偏移值:

WITH date_rn AS (
    SELECT 
        actualDate,
        ROW_NUMBER() OVER(ORDER BY CAST(actualDate AS DATE) ASC) AS rn
    FROM (
        VALUES ('2021-09-20')
        ,      ('2021-09-21')
        ,      ('2021-09-22')
        ,      ('2021-09-23')
        ,      ('2021-09-24')
        ,      ('2021-09-25')
        ,      ('2021-09-26')
        ,      ('2021-09-27')
        ,      ('2021-09-28')
    ) as t(actualDate)
)
SELECT 
    actualDate,
    rn - (SELECT rn FROM date_rn WHERE actualDate = '2021-09-24') AS dateOffset
FROM date_rn
ORDER BY actualDate

该方案更适用于日期维度表不连续、需要按现有日期序列计算偏移的场景。

内容的提问来源于stack exchange,提问作者Umar.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:24:03