2016-11-14 6 views
0

私は以下の例を挙げています。私はSeq番号を持つId列を持っているので、それらをIDでグループ化する必要があります。また、Seq番号が順不同であればどこでもグループ化する必要があります。 私はTeradataを使用しています。シーケンス番号を見つけるためのSQL

データ:あなたは、ネストされたOLAP関数を適用する必要が

DATA Sample 
id Seq 
abcd 1 
abcd 2 
abcd 3 
abcd 5 
abcd 6 
abcd 7 
abcd 8 
abcd 10 
abcd 11 
ab 2 
ab 3 
ab 4 
ab 8 
ab 9 

期待される結果

id Seq Group_nbr 
abcd 1 1 
abcd 2 1 
abcd 3 1 
abcd 5 2 
abcd 6 2 
abcd 7 2 
abcd 8 2 
abcd 10 3 
abcd 11 3 
ab 2 1 
ab 3 1 
ab 4 1 
ab 8 2 
ab 9 2 

答えて

2

SELECT id, Seq, 
    Sum(Flag) -- assign a group number 
    Over (PARTITION BY id 
     ORDER BY Seq 
     ROWS Unbounded Preceding) AS group_nbr 
FROM 
(
    SELECT id, Seq, 
     CASE WHEN Max(Seq) -- indicate if there's a gap in the sequence 
       Over (PARTITION BY id 
         ORDER BY Seq 
         ROWS BETWEEN 1 Preceding AND 1 Preceding) + 1 = Seq 
      THEN 0 
      ELSE 1 
     END AS flag 
    FROM tab 
) AS dt 
+0

dnoeth、これは完全にうまく働きました。どうもありがとうございます。 – Dave

関連する問題