取决于另一列值的滚动总和

问题描述 投票:0回答:1

我有如下表数据

Country    roll   value
us          0      100
us          0      200
us          1      50
us          1      250
us          1      350
us          0      75
cn          1     500
cn          0     200
cn          1     300

我想放入下面的其他表中插入

Country    roll   value  rollingsum
us          0      100     100
us          0      200     200
us          1      50      250(200+50)
us          1      250     500(250+250)
us          1      350     850(500+350)
us          0      75      75
cn          1     500      500
cn          0     200      200
cn          1     300      500

如果column roll = 1,那么我想在行中将前一个值与value列相加。如果下一个滚动值是1,则将前一个滚动总和值与当前值相加。请让我知道如何获得此

sql impala
1个回答
0
投票

SQL表表示无序集。除非有列指定顺序,否则没有顺序。以下假设有一个

您可以将组分配给行进行分配。分组是直到该行并包括该行的0的数目。然后使用累计和:

select t.*,
       sum(value) over (partition by country, grp
                        order by <ordering col>
                        rows between unbounded preceding and current row
                       ) as 
from (select t.*,
             sum(case when roll = 0 then 1 else 0 end) over (partition by country
                                                             order by <ordering col>
                                                             rows between rollingsumunbounded preceding and current row
                                                            ) as grp
      from t
     ) t;
© www.soinside.com 2019 - 2024. All rights reserved.