删除重复的行,然后相互跟随

时间:2017-08-22 18:08:02

标签: sql vertica

很难制定,所以我只是举个例子,欢迎你编辑我的问题和标题。

假设我有一张桌子

   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 这样的功能,似乎能够做到这一点,但是文档中的示例对我不起作用

2 个答案:

答案 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,结果与问题中所述的结果不同。为行号添加单独的列并对其进行排序会得到正确的结果。