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

Snowflake中按周计算供应预测的实现问题(LAG函数未达预期)

在Snowflake中按周计算Projection的正确实现方案

你需要按周计算Projection,公式为(上周剩余供应) + (本周Supply) - (本周Demand),这个逻辑本质是累计滚动计算——每周的Projection等于从第一周到当前周的Supply - Demand的累计和。以下是Snowflake中的正确实现代码:

SELECT
    Supply,
    Demand,
    Week_Start_Date,
    SUM(Supply - Demand) OVER (
        ORDER BY TO_DATE(Week_Start_Date, 'DD-MM-YYYY')
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS Proj
FROM your_table_name
ORDER BY TO_DATE(Week_Start_Date, 'DD-MM-YYYY');

代码说明

  1. 日期排序处理:TO_DATE(Week_Start_Date, 'DD-MM-YYYY')将字符串格式的日期转换为日期类型,确保周顺序正确(避免字符串排序导致的日期错乱)。
  2. 累计窗口函数:SUM(Supply - Demand) OVER (...)实现从第一行到当前行的累计求和,完全匹配你的Projection逻辑:
    • 第一周:1500 - 500 = 1000(符合预期)
    • 第二周:1000 + (0 - 500) = 500(符合预期)
    • 第九周:(-2000) + (10000 - 500) = 7500(符合预期)

为什么单独用LAG函数无法得到正确结果

LAG函数只能获取上一行的原始字段值(如Supply、Demand),但无法直接引用上一行计算出的Proj结果。如果一定要用LAG实现,需要结合递归CTE,但累计SUM窗口函数是更简洁、高效的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:24:52