使用 OVER Partition by 滚动总计时处理重复项
Handling duplicates when rolling totals using OVER Partition by
我正在尝试获取每个日期的滚动金额列总计,从每月的第一天到输入 table.
中显示的任何日期列值
输出要求
- 按 'team' 列分区
- 在每个月的 1 号重新开始滚动总计
问题 1
我的以下查询是否正确以获得下面输出 Table 中显示的所需输出要求?它似乎有效,但我必须确认。
SELECT
*,
SUM(amount) OVER (
PARTITION BY
team,
month_id
ORDER BY
date ASC
) rolling_amount_total
FROM input_table;
问题二
如何处理 Input Table 前两行中显示的重复日期?只要有重复的日期,金额也是重复的。我在这里看到了一个解决方案: 但没有运气让它删除重复项。我的非工作代码示例如下。
SELECT
*,
SUM(amount) OVER (
PARTITION BY
team,
month_id
ORDER BY
date ASC
) rolling_amount_total
FROM (
SELECT DISTINCT
date,
amount,
team,
month_id
FROM input_table
) t
输入Table
date
amount
team
month_id
2022-04-01
1
A
2022-04
2022-04-01
1
A
2022-04
2022-04-02
2
A
2022-04
2022-05-01
4
B
2022-05
2022-05-02
4
B
2022-05
期望输出Table
date
amount
team
month_id
Rolling_Amount_Total
2022-04-01
1
A
2022-04
1
2022-04-02
2
A
2022-04
3
2022-05-01
4
B
2022-05
4
2022-05-02
4
B
2022-05
8
Q1。你的 sum() over () 是正确的
Q2。将第一个查询中的 from input_table
替换为 :
from (select date, sum(amount) as amount, team, month_id
from input_table
group by date, team, month_id
) as t
我正在尝试获取每个日期的滚动金额列总计,从每月的第一天到输入 table.
中显示的任何日期列值输出要求
- 按 'team' 列分区
- 在每个月的 1 号重新开始滚动总计
问题 1
我的以下查询是否正确以获得下面输出 Table 中显示的所需输出要求?它似乎有效,但我必须确认。
SELECT
*,
SUM(amount) OVER (
PARTITION BY
team,
month_id
ORDER BY
date ASC
) rolling_amount_total
FROM input_table;
问题二
如何处理 Input Table 前两行中显示的重复日期?只要有重复的日期,金额也是重复的。我在这里看到了一个解决方案:
SELECT
*,
SUM(amount) OVER (
PARTITION BY
team,
month_id
ORDER BY
date ASC
) rolling_amount_total
FROM (
SELECT DISTINCT
date,
amount,
team,
month_id
FROM input_table
) t
输入Table
date | amount | team | month_id |
---|---|---|---|
2022-04-01 | 1 | A | 2022-04 |
2022-04-01 | 1 | A | 2022-04 |
2022-04-02 | 2 | A | 2022-04 |
2022-05-01 | 4 | B | 2022-05 |
2022-05-02 | 4 | B | 2022-05 |
期望输出Table
date | amount | team | month_id | Rolling_Amount_Total |
---|---|---|---|---|
2022-04-01 | 1 | A | 2022-04 | 1 |
2022-04-02 | 2 | A | 2022-04 | 3 |
2022-05-01 | 4 | B | 2022-05 | 4 |
2022-05-02 | 4 | B | 2022-05 | 8 |
Q1。你的 sum() over () 是正确的
Q2。将第一个查询中的 from input_table
替换为 :
from (select date, sum(amount) as amount, team, month_id
from input_table
group by date, team, month_id
) as t