我有如下表数据
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表表示无序集。除非有列指定顺序,否则没有顺序。以下假设有一个
您可以将组分配给行进行分配。分组是直到该行并包括该行的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;