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

如何实现T-SQL中LEAD驱动的ProjectedCashCollection全周期覆盖及4周扩展?

解决T-SQL填充ProjectedCashCollection并生成4周预测的问题

首先先修正你原代码里的语法小问题——Released和后面的LEAD表达式之间缺了个逗号,这会直接导致查询报错。接下来针对你的需求,我们可以通过生成未来4周的日期序列+调整窗口函数逻辑来实现预期效果:

完整解决方案代码

WITH DateSeries AS (
    -- 获取原表中最新的周期结束日期
    SELECT 
        MAX(PeriodEnd) AS MaxPeriodEnd
    FROM table

    UNION ALL

    -- 递归生成未来4周的周期结束日期(假设周期为每周7天,可根据实际规则调整)
    SELECT 
        DATEADD(WEEK, 1, MaxPeriodEnd) AS MaxPeriodEnd
    FROM DateSeries
    WHERE 
        MaxPeriodEnd < DATEADD(WEEK, 4, (SELECT MAX(PeriodEnd) FROM table))
),
-- 合并现有数据与未来4周的空周期数据
FullPeriods AS (
    SELECT 
        PeriodBegin,
        PeriodEnd,
        Amt,
        Released
    FROM table

    UNION ALL

    SELECT 
        -- 按原表周期规则生成周期开始日(示例为周期结束日往前推6天,即一周跨度)
        DATEADD(DAY, -6, ds.MaxPeriodEnd) AS PeriodBegin,
        ds.MaxPeriodEnd AS PeriodEnd,
        NULL AS Amt,
        NULL AS Released
    FROM DateSeries ds
    -- 避免重复添加已存在的日期
    WHERE NOT EXISTS (
        SELECT 1 FROM table t WHERE t.PeriodEnd = ds.MaxPeriodEnd
    )
)
SELECT 
    PeriodBegin,
    PeriodEnd,
    Amt,
    Released,
    -- 调整窗口函数逻辑:按日期升序排列,取当前行4周后的Released值;未来周期则取现有最新的对应行值
    (LAG(Released, 4) OVER (ORDER BY PeriodEnd DESC) * 0.29) AS ProjectedCashCollection
FROM FullPeriods
ORDER BY PeriodEnd ASC;

代码逻辑说明

  1. DateSeries CTE:递归生成原表最大日期之后的4个连续周期结束日,确保我们能覆盖需要预测的时间范围。
  2. FullPeriods CTE:把原表的实际业务数据和未来4周的空周期数据合并,空周期的Amt和Released设为NULL(因为是预测期还没有实际值)。
  3. 最终查询:
    • 用ORDER BY PeriodEnd DESC配合LAG(Released,4),让未来的周期行(排在结果集最前面)能取到原表中最新的4个Released值来计算预测收款;同时现有所有周期行也能正确匹配到对应的4周前的Released值,实现全列填充。
    • 如果你的周期不是严格每周7天,只需调整DATEADD的参数,匹配原表PeriodBegin和PeriodEnd的生成规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:39:03