2016-12-07 4 views
2

У меня есть 3 столбца в моей таблице. И я хотел бы подсчитать, для каждого пользователя, заказанного по времени, сколько раз value равно B непрерывно. Что-то вроде самого длинного подсписка с одинаковым значением. Например, данные нижеПодсчитайте, сколько раз значение постоянно появляется в Hive/SQL

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

Это возможно даже без определенной пользователем функции в улье? Я немного искал 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 
;