2017-04-06 16 views
0

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

すぎ – scaisEdge

答えて

0
select 
    groupid, 
    seq, 
    tag, 
    last_value(tag) ignore nulls over (
     partition by groupid 
     order by seq 
    ) as new_tag 
from t 
order by groupid, seq; 

GRO 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 

19 rows selected. 
+0

@Samediを...適切なデータサンプルと期待される結果を追加し、テキストデータを追加するだけでなく、画像を使用していない: - ありがとうございます。しかし、このコードを実行しようとしたときに、次のようなエラーが表示されます。 "ステートメントのコンパイル中にエラーが発生しました:FAILED:ParseException行6:23 'NULLS'が 'IGNORE'の近くにありません" – Dhana

+0

Oracleのバージョンは? –

+0

実際、私はHIVEでこれを実行しています。私は、OracleとHIVEでSQLの機能が同じになると思ったので、そのタグでOracleを選択したのです。 – Dhana

関連する問題