删除重复的行并因此相互跟随

Delete rows, which are duplicated and follow each other consequently

很难表述,所以我只是举个例子,欢迎您编辑我的问题和标题。

假设,我有一个 table

   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

对于 each id 我想通过 flag 列压缩 table 这样所有重复的 flag 值彼此跟随 sum 聚合折叠到一行。 想要的结果

   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  

P.S: 我发现像 CONDITIONAL_CHANGE_EVENT 这样的函数似乎可以做到这一点,但文档中的示例不适用于我

使用行号差异方法根据连续行标志相同来分配组。此后使用 运行 总和。

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

这是一种使用 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,结果与问题中您想要的结果不同。为行号添加一个单独的列并对其进行排序会给出正确的结果。