如何用SQL窗口函数实现Alteryx中Exasol商品最近28天Qty总和
用Exasol SQL窗口函数实现最近28天Qty累加
当然可以用SQL窗口函数完美实现这个需求!你之前的代码问题出在窗口范围的定义上——用date_trunc('month',"Date")分区会把累加限制在当月内,而我们需要的是跨月份的动态28天滑动窗口。
正确的SQL实现代码
SELECT "article", "Date", "Qty", SUM("Qty") OVER ( PARTITION BY "article" ORDER BY "Date" RANGE BETWEEN INTERVAL '27' DAY PRECEDING AND CURRENT ROW ) AS "Sum_Qty_28_days" FROM your_table_name;
代码解释
PARTITION BY "article":确保只对同一商品的记录进行累加计算,不会和其他商品的数据混淆。ORDER BY "Date":按日期排序,保证窗口是按照时间顺序从旧到新计算的。RANGE BETWEEN INTERVAL '27' DAY PRECEDING AND CURRENT ROW:这是实现28天窗口的核心:INTERVAL '27' DAY PRECEDING表示取当前日期往前推27天的时间点- 结合
CURRENT ROW,整个窗口会包含当前日期及之前27天内的所有记录,正好覆盖28天的时间范围(当天+前27天) - Exasol支持直接对DATE类型的排序键使用INTERVAL来定义RANGE窗口,非常适合这种时间滑动需求。
针对你的示例验证
以商品'A'在2019-10-08的记录为例:
- 窗口范围是2019-09-11(2019-10-08减去27天)到2019-10-08
- 你示例中的2019-09-15、2019-10-05、2019-10-08都在这个范围内,对应的Qty值累加后得到8,完全符合你的需求。
注意事项
- 确保
"Date"列是DATE类型(而非字符串),否则INTERVAL的计算会出错 - 如果同一商品同一天有多条记录,该逻辑会自动累加所有符合条件的Qty值
- 如果某个商品在28天窗口内没有其他记录,
Sum_Qty_28_days会等于当天的Qty值
内容的提问来源于stack exchange,提问作者Pardeep Naik
相关产品推荐
相关产品推荐

