2016-11-14 29 views
0

我在下面列出一個例子。我有Id列和Seq編號,我需要通過編號將它們分組,並且Seq編號無序。 順便說一句,我正在使用Teradata。SQL查找序號

數據:

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

您需要應用嵌套OLAP的功能:

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