SQL 用于找出序列号

SQL for to find out of Sequence number

我在下面列出了一个例子。我有带有 Seq 编号的 Id 列,我需要按 id 对它们进行分组,以及 Seq 编号乱序的地方。 顺便说一句,我正在使用 Teradata。

数据:

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

您需要应用嵌套的 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