2016-12-07 8 views
2

テーブルに3列あります。そして、私は各ユーザIDについて、時間順に数えたいと思います。valueBと何度も連続しています。同じ値を持つ最長のサブリストのようなもの。例えば、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 
; 
関連する問題