很难制定,所以我只是举个例子,欢迎你编辑我的问题和标题。
假设我有一张桌子
flag id value datetime
0 b 1 343 13
1 a 1 23 12
2 b 1 21 11
3 b 1 32 10
4 c 2 43 11
5 d 2 43 10
6 d 2 32 9
7 c 2 1 8
对于每个 id
我希望按flag
列对表格进行加扰,以便所有相互跟随的重复flag
值合并为{ {1}}聚合。 期望的结果:
sum
P.S:我找到了像 flag id value
0 b 1 343
1 a 1 23
2 b 1 53
3 c 2 75
4 d 2 32
5 c 2 1
这样的功能,似乎能够做到这一点,但是文档中的示例对我不起作用
答案 0 :(得分:3)
使用行号方法的不同来根据连续的行标志分配组是否相同。之后使用一笔运行金额。
select distinct id,flag,sum(value) over(partition by id,grp) as finalvalue
from (
select t.*,row_number() over(partition by id order by datetime)-row_number() over(partition by id,flag order by datetime) as grp
from tbl t
) t
答案 1 :(得分:1)
这是一种使用CONDITIONAL_CHANGE_EVENT的方法:
select
flag,
id,
sum(value) value
from (
select
conditional_change_event(flag) over (order by datetime desc) part,
flag,
id,
value
from so
) t
group by part, flag, id
order by part;
由于order by datetime
,结果与问题中所述的结果不同。为行号添加单独的列并对其进行排序会得到正确的结果。