首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SELECT中添加一个主动计数器

在SELECT中添加一个主动计数器
EN

Stack Overflow用户
提问于 2015-04-10 00:56:56
回答 1查看 82关注 0票数 0

我有一张这样的桌子:

代码语言:javascript
运行
复制
Row#    ID    Indicator
 1      001      Yes
 2      001      No
 3      001      No
 4      001      No
 5      001      No
 6      001      Yes
 7      001      No
 8      002      No
 9      002      No
 10     002      No
 11     002      No
 12     002      No
 13     002      No
 14     002      Yes
 15     002      No
 16     003      No
 17     003      Yes
 18     003      No
 19     003      No
 20     003      No
 21     003      No
 22     004      No
 .        .      .
 .        .      .
100     020      Yes

我希望有一个计数器,计数数为每3个连续'No‘,并按ID分组。计数器函数在看到"No“时触发。一旦连续出现三行“否”,计数器=计数器+ 1。不允许重复计数。

例如:

对于ID = 001,从第2行到第4行有三个连续的"No“,所以计数器值= 1。

由于使用了从第2行到第4行的“否”,所以由于没有双重计数规则,所以不能将第3行到第5行计算为事件。

对于ID = 002,从第8行到第10行和从第11行到第13行有三个连续的"No“,因此计数器值= 2。

所需的输出如下:

代码语言:javascript
运行
复制
ID    Counter
001      1
002      2
003      1
 .       .
 .       .
100      0

编辑1:行#不是真正的列。这是为了解释。

编辑2:我意识到row#对于这个问题是必不可少的。我们再把它变成一个真正的专栏吧。因此,上面给出的原始数据样本仍然有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 01:07:54

Hive支持row_number(),因此您可以使用它来枚举值。逻辑一开始可能并不明显,但其思想是枚举连续的"N“值,并将结果除以3。后一部分是获取所需序列数的逻辑。

以下版本假设“N”只有一个长序列,这是问题中数据的格式:

代码语言:javascript
运行
复制
select t.id, max(floor(seqnum / 3.0))
from (select t.*,
             row_number() over (partition by id, indicator, grp order by row#) as seqnum
      from (select t.*,
                   (row_number() over (partition by id order by row#) -
                    row_number() over (partition by id, indicator order by row#)
                   ) as grp
            from table t
           ) t
     ) t
where indicator = 'N'
group by id;

可以对此进行修改,以处理给定id的多个“N”序列,但是查询要复杂一些。

编辑:

我认识到以下几点比较笼统:

代码语言:javascript
运行
复制
select t.id, sum(case when pmod(seqnum, 3) = 0 then 1 else 0 end)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29551584

复制
相关文章

相似问题

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