发布
社区首页 >问答首页 >删除重复的行,从而相互跟随。

删除重复的行,从而相互跟随。
EN

Stack Overflow用户
提问于 2017-08-22 18:08:02
回答 2查看 61关注 0票数 1

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

假设我有一张桌子

代码语言:javascript
代码运行次数:0
复制
   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值都按照彼此的顺序折叠成一行,并进行sum聚合。期望结果

代码语言:javascript
代码运行次数:0
复制
   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这样的函数,它们似乎能够做到这一点,但是它们在文档中的例子对我不起作用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-22 18:34:46

使用不同的行号方法,根据连续的行标志是相同的来分配组。然后,使用一个运行的和。

代码语言:javascript
代码运行次数:0
复制
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
票数 3
EN

Stack Overflow用户

发布于 2017-08-23 06:19:16

下面是一种使用CONDITIONAL_CHANGE_EVENT的方法:

代码语言:javascript
代码运行次数:0
复制
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的原因,结果与问题中所述的预期结果不同。为行号添加一个单独的列,并对其进行排序,从而得到正确的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45824306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档