【发布时间】:2021-01-27 23:53:47
【问题描述】:
我在 redshift 运行总和功能中遇到问题。这是我的设置。
表格
create table test
( cal_year varchar(30),
cal_month varchar(30),
dept_id varchar(50),
hc int
);
虚拟值:
insert into qs.patpall_test values( 2021, 1 , 111, 50);
insert into qs.patpall_test values( 2021,1 , 222, 30);
insert into qs.patpall_test values( 2021,1 , 333, -5);
insert into qs.patpall_test values(2021, 2 , 222, 10);
基本上,第一个月,它是人数(hc),第二个月它只是说我增加或减少的hc数量。
现在,我需要每年、每月和部门明智地计算总和。这是代码。
drop table if EXISTS a;
create temp table a as
select cal_year, cal_month, dept_id, sum_hc,
sum(sum_hc) over (PARTITION BY cal_year ,dept_id
ORDER BY cal_month rows unbounded preceding ) as running_hc
from (
select cal_year, cal_month, dept_id,
sum(hc) sum_hc
from qs.patpall_test
group by 1,2,3
);
如果我在聚合级别检查上述查询的输出。它给了我不正确的结果。
select cal_year, cal_month, sum(sum_hc), sum(running_hc)
from a
group by 1,2
这是我得到的输出。
| Cal_year | Cal Month | sum_hc | running_hc |
|---|---|---|---|
| 2021 | 1 | 75 | 75 |
| 2021 | 2 | 10 | 40 |
它不计算第 2 个月不存在的部门 ID。
但是,我实际上是在寻找下面的输出。
| Cal_year | Cal Month | sum_hc | running_hc |
|---|---|---|---|
| 2021 | 1 | 75 | 75 |
| 2021 | 2 | 10 | 85 |
第 1 个月出现的 depat_id 很少,但在第 2 个月不出现。因此,它们不会被添加到第 2 个月的运行总和中。我正在寻找当月的 hc,方法是将所有上述月份的部门添加到运行总和中,并且还能够在特定月份向下钻取。
【问题讨论】:
标签: sql amazon-web-services amazon-redshift window-functions