2016-10-27 5 views
1

SQL SELECTには少し問題があります。私は、列NR 2で同じ値の連続グループを番号を付ける: 1,'a' 2,'a, 3,'b' 4,'c' 5,'a' 6,'a' 7,'e' 8,'e' SQLでのデータの番号付け

出力は私がしたい:

1,'a',1 2,'a,,1 3,'b',2 4,'c',3 5,'a',4 6,'a',4 7,'e',5 8,'e',5

それだけの選択でそれを行うことは可能ですか?私はVerticaのSQLでそれを行う必要があります。それはselectの変数に対する操作をサポートしていないため、前に変数を宣言して何らかの形でインクリメントします。

答えて

2

を。基本的に、シーケンスインクリメントをパラメータとしてトリガしたいというコラムを送信し、それをウィンドウで必要な順序で注文します。 Verticaの解析関数です。

SELECT col1, 
     col2, 
     CONDITIONAL_CHANGE_EVENT(col2) OVER (ORDER BY col1) 
FROM mytable 
+0

は本当にありがとう、魅力のように動作します –

2

これはウィンドウ関数で行うことができます。一つの方法は、lag()を使用して、値が変更されたときの累積和を行います。あなたは非常に単純であるCONDITIONAL_CHANGE_EVENT()を使用することができます

select t.col1, t.col2, 
     sum(case when col2 = prev_col2 then 0 else 1 end) over (order by col1) as newcol 
from (select t.*, 
      lag(col2) over (order by col1) as prev_col2 
     from t 
    ) t 
+0

素晴らしい、本当にありがとう。 :) –

関連する問題