【发布时间】:2020-09-06 07:47:55
【问题描述】:
我想显示每件商品每周 4 周的销售额总和(当前周加上前 3 周)。
原始数据
+--------+--------+----------+
| Item | Week | sales |
+--------+--------+----------+
| a | 1 | 10 |
| a | 2 | 10 |
| a | 4 | 10 |
| a | 7 | 10 |
| a | 8 | 10 |
| a | 10 | 10 |
| b | 1 | 10 |
| b | 2 | 10 |
| b | 4 | 10 |
| b | 7 | 10 |
| b | 8 | 10 |
| b | 10 | 10 |
+--------+--------+----------+
预期结果(以a项为例)
+------+------+------------------------------------------------------+
| Item | Week | sales |
+------+------+------------------------------------------------------+
| a | 1 | 10 |
| a | 2 | 20 |
| a | 3 | 30 |
| a | 4 | 30 |
| a | 5 | 20(Note: sales of Week 5+Week 4+Week 3+Week 2) |
| a | 6 | 10 |
| a | 7 | 20[Note: 10(Week 7)+0(Week 6)+0(Week 5)+10 (Week 4)] |
| a | 8 | 20 |
| a | 9 | 20 |
| a | 10 | 30(Note: sales of Week 10+Week 9+Week 8+Week 7) |
+------+------+------------------------------------------------------+
我尝试使用
sum (sales) over (partition by item order by week row 3 preceding)
但是,它会跳过没有销售记录的周,并将所有非零值相加。例如:对于第 7 周,sum over 计算结果为 40,因为它将第 7、4、2、1 周的销售额相加。 有没有办法达到预期的效果?
【问题讨论】:
-
显示您的代码。
-
您使用的是哪种 DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag。 Why should I tag my DBMS
-
感谢您的 cmets。我正在使用红移。
标签: sql amazon-redshift window-functions