代码之家  ›  专栏  ›  技术社区  ›  Ladenkov Vladislav

删除重复的行,因此这些行相互跟随

  •  1
  • Ladenkov Vladislav  · 技术社区  · 7 年前

    假设我有一张桌子

       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 列,使所有 旗帜 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  
    

    我发现函数如下 CONDITIONAL_CHANGE_EVENT ,它似乎能够做到这一点,但文档中的示例并不适用于我

    2 回复  |  直到 7 年前
        1
  •  3
  •   Vamsi Prabhala    7 年前

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

    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
    
        2
  •  1
  •   savyuk    7 年前

    下面是一种使用CONDITIONAL\u CHANGE\u事件的方法:

    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