求一个使用SQL Server Parallel Warehouse的朋友。
他们™ 有一个每周销售额表,如下所示(请原谅不正确的列对齐):
+-------+------------+
| week | amount |
+-------+------------+
| 1 | 100.00 |
| 2 | 100.00 |
| 3 | 100.00 |
| 4 | 100.00 |
| 5 | 100000.00 |
| 6 | 100.00 |
| 7 | 50000.00 |
| 8 | 50000.00 |
| 9 | 50000.00 |
| 10 | 100.00 |
+-------+------------+
还有一个“糟糕”周的列表,例如
+------+
| week |
+------+
| 5 |
| 7 |
| 8 |
| 9 |
+------+
并且他们™需要为每一周选择,包括“糟糕”周,前四个非“糟糕”周的销售额总和,即尽可能追溯,跳过“糟糕”周记录,最多加起来四个销售额。所以预期的结果是:
+-------+------------+
| week | sum_not_bad|
+-------+------------+
| 1 | null |
| 2 | 100.00 |
| 3 | 200.00 |
| 4 | 300.00 |
| 5 | 400.00 |
| 6 | 400.00 |
| 7 | 400.00 |
| 8 | 400.00 |
| 9 | 400.00 |
| 10 | 400.00 |
+-------+------------+
我有一个小提琴,我认为朝着正确的方向迈出了一步,但我无法弄清楚下一步。
有没有人有见解?
输出
小提琴手
这是一种方法,它用于
PARTITION
将所有良好的周分组在一起,并获得前 4 个良好周的累积良好计数。然后是沿着解决方案 2 使用串联的方法来解决缺乏对LAST_VALUE
忽略 NULL 的支持和级联之前的“好”值的问题。它跟踪两个累积和。一个包括当前行(如果“下一个”行不好,则由下一行使用)和一个不包括当前行。