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');
代码说明
- 日期排序处理:
TO_DATE(Week_Start_Date, 'DD-MM-YYYY')将字符串格式的日期转换为日期类型,确保周顺序正确(避免字符串排序导致的日期错乱)。 - 累计窗口函数:
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
相关产品推荐
相关产品推荐

