Redshift 运行 SUM 挑战

Redshift Running SUM challenge

给定以下数据示例,我正在尝试执行一个 运行 sum() 迄今为止孤立的 account_no 服务。希望这里有人可以提供帮助。

snapshot_dt             | account_no | account_name | service | cost_one
2022-02-22 00:00:00.000 | 00001      | name_1       | svc_1   | 0.10
2022-02-22 00:00:00.000 | 00001      | name_1       | svc_2   | 0.10
2022-02-22 00:00:00.000 | 00001      | name_1       | svc_3   | 0.10
2022-02-22 00:00:00.000 | 00002      | name_2       | svc_1   | 0.10
2022-02-22 00:00:00.000 | 00002      | name_2       | svc_2   | 0.10
2022-02-22 00:00:00.000 | 00002      | name_2       | svc_3   | 0.10
2022-02-22 00:00:00.000 | 00003      | name_3       | svc_1   | 0.10
2022-02-22 00:00:00.000 | 00003      | name_3       | svc_2   | 0.10
2022-02-22 00:00:00.000 | 00003      | name_3       | svc_3   | 0.10
2022-02-23 00:00:00.000 | 00001      | name_1       | svc_1   | 0.10
2022-02-23 00:00:00.000 | 00001      | name_1       | svc_2   | 0.10
2022-02-23 00:00:00.000 | 00001      | name_1       | svc_3   | 0.10
2022-02-23 00:00:00.000 | 00002      | name_2       | svc_1   | 0.10
2022-02-23 00:00:00.000 | 00002      | name_2       | svc_2   | 0.10
2022-02-23 00:00:00.000 | 00002      | name_2       | svc_3   | 0.10
2022-02-23 00:00:00.000 | 00003      | name_3       | svc_1   | 0.10
2022-02-23 00:00:00.000 | 00003      | name_3       | svc_2   | 0.10
2022-02-23 00:00:00.000 | 00003      | name_3       | svc_3   | 0.10
...

我从这段代码开始:

with _data as (
    select
        snapshot_dt
        , sum(cost_1) as total_cost_1
    from my_table 
    group by snapshot_dt
)
select 
    snapshot_dt
    , sum(total_cost_1) over (order by snapshot_dt rows unbounded preceding) as running_cost_1
from _data

以上按预期工作,但后来我想看看我是否可以添加其他数据功能,例如 account_name 和服务,以便我可以通过 [=24= 获得特定的 运行 成本]、account_name,或服务。

我尝试将这些数据特征添加到一些分组语句中,最终似乎发生的是基于前一行的 运行 总数,我怀疑与 rows unbounded preceding.

有关

您的原始代码以及您需要包含的所有地方 account_name 和 double-stars 之间的服务 (**)。去掉双星就好了:

with _data as (
    select
    snapshot_dt, sum(cost_1) as total_cost_1
    from my_table 
    group by **account_name, service,** snapshot_dt
)
select **account_name, service,** snapshot_dt
, sum(total_cost_1) over (Partition By **account_name, service,** order by snapshot_dt rows unbounded preceding) as running_cost_1
from _data
** Order By account_name, service, snapshot_dt **