计算一个值在 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 中的用户定义函数,这是否可能?我已经深入研究了LAGLEAD,但找不到方法。 :(

【问题讨论】:

【参考方案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 表中出现的次数并在列中返回该数字?

计算 PySpark SQL Join 中每个不同值在列中出现的次数

过滤值在 PySpark 中出现的次数

如何计算Dataframe中,列中元素连续出现次数

Transact-SQL计算整个表中所有值的出现的次数