2017-02-03 8 views
2
customer txn_date tag running_sum 
A   1-Jan-17 1 1 
A   2-Jan-17 1 2 
A   3-Jan-17 1 3 
A   4-Jan-17 1 4 
A   5-Jan-17 1 5 
A   6-Jan-17 1 6 
A   7-Jan-17 0 0 
A   8-Jan-17 1 1 
A   9-Jan-17 1 2 
A   10-Jan-17 1 3 
A   11-Jan-17 0 0 
A   12-Jan-17 0 0 
A   13-Jan-17 1 1 
A   14-Jan-17 1 2 
A   15-Jan-17 0 0 

tag = 0の場合、running_sumを取得してrunning_sumをゼロにリセットするにはどうすればよいですか?上記のサンプルのように。 TIAHIVEでタグ<> 0の場合は実行合計を計算し、タグ= 0の場合は0にリセットする方法は?

+0

あなたはSQLクエリを作成しようとしていますか?はいの場合は、何を試しましたか? [質問する](http://stackoverflow.com/help/how-to-ask)を参照してください – yeputons

答えて

1

あなたがする必要があるのは、1と0の各セクションに「グループ」を作成することです。これを行うには、ブール値フラグを作成し、その列を累積的に合計してグループを取得します。そこから元のtag列をサブクエリで作成した各グループで累積的に合計することができます。

クエリ

SELECT customer 
    , txn_date 
    , tag 
    , SUM(tag) OVER (PARTITION BY customer, flg_sum ORDER BY txn_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_sum 
FROM (
    SELECT * 
    , SUM(tag_flg) OVER (PARTITION BY customer ORDER BY txn_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS flg_sum 
    FROM (
    SELECT * 
     , CASE WHEN tag = 1 THEN 0 ELSE 1 END AS tag_flg 
    FROM database.table) x) y 

出力

customer  txn_date  tag  running_sum 
A    2017-01-01  1  1 
A    2017-01-02  1  2 
A    2017-01-03  1  3 
A    2017-01-04  1  4 
A    2017-01-05  1  5 
A    2017-01-06  1  6 
A    2017-01-07  0  0 
A    2017-01-08  1  1 
A    2017-01-09  1  2 
A    2017-01-10  1  3 
A    2017-01-11  0  0 
A    2017-01-12  0  0 
A    2017-01-13  1  1 
A    2017-01-14  1  2 
A    2017-01-15  0  0 
+0

ありがとう@ gobrewers14!出来た!実際には、私はラグとリード関数を使ってこれを利用しようとしていますが、無駄です。 – BoyKislot

関連する問題