2016-11-14 1 views
0

아래 예를 나열합니다. Seq 번호가있는 Id 열이 있고 ID별로 그룹화해야하며 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 

예상 결과 당신은 중첩 된 OLAP-기능을 적용 할 필요가

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

관련 문제