Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算值在配置单元/SQL中连续出现的次数_Sql_Hive_Hiveql - Fatal编程技术网

计算值在配置单元/SQL中连续出现的次数

计算值在配置单元/SQL中连续出现的次数,sql,hive,hiveql,Sql,Hive,Hiveql,我的表中有3列。我想计算一下,对于每个按时间排序的用户ID,值连续等于B的次数。类似于具有相同值的最长子列表。例如,下面的数据 时间用户ID值 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 会回来吗 用户ID时间 1 2 2 3 如果没有配置单元中的用户定义函数,这可

我的表中有3列。我想计算一下,对于每个按时间排序的用户ID,
连续等于
B
的次数。类似于具有相同值的最长子列表。例如,下面的数据


时间用户ID值
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

会回来吗


用户ID时间
1 2
2 3

如果没有配置单元中的用户定义函数,这可能吗?我在
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 
;