计算一个值在 Hive/SQL 中连续出现的次数
Posted
技术标签:
【中文标题】计算一个值在 Hive/SQL 中连续出现的次数【英文标题】:Count how many times a value appears continuously in Hive/SQL 【发布时间】:2016-12-07 08:43:15 【问题描述】:我的表中有 3 列。对于按时间排序的每个用户 ID,我想计算 value
连续等于 B
的次数。类似于具有相同值的最长子列表。比如下面的数据
time userid value
2016-01-01 1 A
2016-01-02 1 B
2016-01-03 1 B
2016-01-04 2 C
2016-01-05 2 B
2016-01-06 2 B
2016-01-07 2 B
2016-01-08 2 C
2016-01-09 2 B
会回来
userid times
1 2
2 3
如果没有 Hive 中的用户定义函数,这是否可能?我已经深入研究了LAG
或LEAD
,但找不到方法。 :(
【问题讨论】:
【参考方案1】:select value
,userid
,max (times) as times
from (select value
,userid
,count (*) as times
from (select value
,userid
,row_number () over
(
partition by userid
order by time
) as rn
,row_number () over
(
partition by userid,value
order by time
) as rn_val
from t
-- where value = 'B'
) t
group by value
,userid
,rn - rn_val
) t
group by value
,userid
order by value
,userid
;
【讨论】:
以上是关于计算一个值在 Hive/SQL 中连续出现的次数的主要内容,如果未能解决你的问题,请参考以下文章
hive sql 经典题目 连续登陆|间隔连续登陆|行列转换|累加|topN | 炸裂
如何计算某些值在 SQL 表中出现的次数并在列中返回该数字?