2017-04-07 8 views
0

GROUPで後続の行で行の値を繰り返そうとしています。グループは1つ以上のTAGを持つことができます。この要件は、TAGが移入された行にNEW_TAGを移入し、同じグループ内に別のTAGが移入されるか、そのGROUPの最後に到達するまで後続の行に移入することです。HIVEのGROUPで値を繰り返す

 
Current Table  Required Table 

GROUPID SEQ TAG GROUPID SEQ TAG NEW_TAG 
------- --- ---- ------- --- --- -------- 
1  1   1  1  
1  2   1  2  
1  3   1  3  
1  4 4  1  4 4 4 
1  5   1  5  4 
1  6   1  6  4 
1  7   1  7  4 
1  8   1  8  4 
2  1   2  1  
2  2   2  2  
2  3   2  3  
2  4   2  4  
2  5 5  2  5 5 5 
2  6   2  6  5 
2  7   2  7  5 
2  8   2  8  5 
2  9 9  2  9 9 9 
2  10   2  10  9 
2  11   2  11  9 

+0

を感謝を増加していますか? –

答えて

0

と仮定すると、タグは常にタグが常に増加している

max(TAG) over 
(
    partition by GROUPID 
    order by  SEQ 
    rows   between unbounded preceding 
       and  current row 
) as NEW_TAG 

select * 
     ,max(TAG) over 
     (
      partition by GROUPID 
      order by  SEQ 
      rows   between unbounded preceding 
         and  current row 
     ) as NEW_TAG 

from mytable 
; 

+---------+--------+--------+---------+ 
| groupid | seq | tag | new_tag | 
+---------+--------+--------+---------+ 
| 1  | 1  |  |   | 
| 1  | 2  |  |   | 
| 1  | 3  |  |   | 
| 1  | 4  | 4  | 4  | 
| 1  | 5  |  | 4  | 
| 1  | 6  |  | 4  | 
| 1  | 7  |  | 4  | 
| 1  | 8  |  | 4  | 
| 2  | 1  |  |   | 
| 2  | 2  |  |   | 
| 2  | 3  |  |   | 
| 2  | 4  |  |   | 
| 2  | 5  | 5  | 5  | 
| 2  | 6  |  | 5  | 
| 2  | 7  |  | 5  | 
| 2  | 8  |  | 5  | 
| 2  | 9  | 9  | 9  | 
| 2  | 10  |  | 9  | 
| 2  | 11  |  | 9  | 
+---------+--------+--------+---------+ 
+0

Dudu Markovitzありがとうございました。これはうまくいった。 !!! – Dhana

+0

答えを受け入れるようにしてください –

関連する問題