使用 OVER Partition by 滚动总计时处理重复项

Handling duplicates when rolling totals using OVER Partition by

我正在尝试获取每个日期的滚动金额列总计,从每月的第一天到输入 table.

中显示的任何日期列值

输出要求

  1. 按 'team' 列分区
  2. 在每个月的 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