2017-12-17 18 views
0

私はこのデータを持っています。私はそれを集約し、集計されたデータにrow_numberを入れたいと思います。ハイブSQLランクID

| ID_1 | time| ID_2 | 
a,  1, 36 
a,  2, 36 
a,  3, 45 
a,  4, 65 
b,  1, 75 
b,  2, 35 
b,  3, 35 
b,  4, 76 

希望の出力は次のようになります。

| ID_1 | ID_2 | Row_number | 
a,  36, 1 
a,  45, 2 
a,  65, 3 
b,  75, 1 
b,  35, 2 
b,  76, 3 

私の試みは、このコードを使用することです:

select 
ID_1, ID_2, 
row_number() over (partition by ID_1, ID_2 order by time desc) as Row_number 
from table1 

しかし、でその収量:

| ID_1 | ID_2| Row_number | 
a,  36, 1 
a,  36, 2 
a,  45, 1 
a,  65, 1 
b,  75, 1 
b,  35, 1 
b,  35, 2 
b,  76, 1 

私は終わりにして、グループを使用している場合は、私は時間のいくつかのエラーを取得できませんグループ分けされている。

+0

は私が期待される出力のいずれかの集計が表示されません。 id1、id2の組み合わせごとに重複を削除したいだけですか? –

+0

さて、私は時間の変数が重複しないので、重複したperseを削除したくありません。しかし、私はID_1とID_2のすべてのユニークな組み合わせが欲しいし、それらを時間順にランク付けします。 – TKN

答えて

1

ID_1,ID_2でグループ化してから、row_number()を適用する必要があります。

SELECT id_1, 
     id_2, 
     row_number() 
     OVER (
      partition BY id_1 
      ORDER BY time) AS Row_number 
FROM (SELECT id_1, 
       id_2, 
       MAX(time) time 
     FROM table1 
     GROUP BY id_1, 
        id_2) b; 

DEMO