【发布时间】:2020-04-09 11:07:42
【问题描述】:
我有一个包含以下列和数据的数据集:
Customer | Week_number | Amount
cust1 | 0 | 100
cust1 | 1 | 200
cust1 | 3 | 300
cust2 | 0 | 1000
cust2 | 1 | 2000
我需要为每个客户计算每两周的总数。
使用窗口函数,我可以做到这一点:
SELECT
CUSTOMER, WEEK_NUMBER
, SUM(AMOUNT) OVER (PARTITION BY CUSTOMER ORDER BY WEEK_NUMBER ROWS 1 PRECEDING) AS FORTNIGHT_AMOUNT
FROM AMOUNT
但是,即使前一周没有金额,这也会增加金额。在上面的示例中,对于第 3 行的 cust1,它将第 3 周和第 1 周相加。只有当 week_number 比当前行的周数小 1 时,才应添加金额。这可能吗?感谢您的帮助。
我得到了什么:
Customer | Week_number | Fortnight_Amount
cust1 | 0 | 100
cust1 | 1 | 300
cust1 | 3 | **500**
cust2 | 0 | 1000
cust2 | 1 | 3000
预期结果:
Customer | Week_number | Fortnight_Amount
cust1 | 0 | 100
cust1 | 1 | 300
cust1 | 3 | **300**
cust2 | 0 | 1000
cust2 | 1 | 3000
【问题讨论】:
-
请向我们展示您的预期结果。
-
如果有
cust1和week_number``4的记录怎么办?您会重置sum,还是继续将其添加到正在运行的sum? -
如果有一个第 4 周(比如 amount=400),那么第 4 周的 fortnight_amount 将为 700(第 4 周 + 第 3 周)
-
对于不会说英语的人来说,两周是两周。