我的桌子上有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
,但是找不到办法。:(
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
;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句