私のようなデータを持っています、各IDについてハイブ内の各IDのためにSQL
ID time
1 9/6/2016 00:01:00
1 9/6/2016 00:01:30
1 9/6/2016 00:02:00
1 9/6/2016 00:04:30
1 9/6/2016 00:05:30
1 9/6/2016 01:05:30
1 9/6/2016 05:05:30
1 9/6/2016 05:06:30
2 9/6/2016 01:55:00
2 9/6/2016 01:56:29
2 9/6/2016 01:57:31
2 9/6/2016 03:55:00
2 9/6/2016 04:13:00
2 9/6/2016 04:15:21
を3分のグループを見つける、私は1にフラグと呼ばれる新しい変数を設定し、最初の値をチェックしたいです時間の。最初の値から、最初のエントリから3分以内にあるエントリをチェックし、すべてのものを1に設定したいと思います。タイムエントリが3分を超えると、フラグ変数を2に設定してから、もう一度設定しますその時間から3分以内にエントリをチェックしてください。これは、各IDについて続行する必要があります。 IDごとに3分のグループを探して、各IDのセットを作成できるようにしたい。
欲しい出力は、ID 1のためにここ
ID time flag
1 9/6/2016 00:01:00 1
1 9/6/2016 00:01:30 1
1 9/6/2016 00:02:00 1
1 9/6/2016 00:04:30 2
1 9/6/2016 00:05:30 2
1 9/6/2016 01:05:30 2
1 9/6/2016 05:05:30 2
1 9/6/2016 05:06:30 2
2 9/6/2016 01:55:00 1
2 9/6/2016 01:56:29 1
2 9/6/2016 01:57:31 1
2 9/6/2016 03:55:00 2
2 9/6/2016 04:13:00 3
2 9/6/2016 04:15:21 3
で、フラグセット1および3行目まで、3分のエントリをチェックし続け、それが3分以上であると、それは2に設定再び3分間のエントリのチェックを開始します。同様にID2も同様です。
次は、この1つは、テーブル全体のランキングされ
select ID, time, rank() over (order by time) as rank from table_name;
、私が試したものです。私は思っている、我々は各IDのそれをランク付けし、最初の値を呼び出し、残りの値でそれを減算し、ここでサブクエリを書くことができます。
これを行うより効率的な方法はありますか?ここではHiveクエリを使用しています。どんな助けもありがとう。