识别连续的行

时间:2013-11-06 22:49:51

标签: mysql sql

我有一个表格格式如下:

 cId    seq 
 ---    --- 
 A      1
 A      2
 A      4
 A      5
 B      8
 B      9
 A      12
 A      13

我想编写一个查询,生成另一个看起来像这样的表:

 cId    seq    consecutive
 ---    ---    -----------
 A      1      1
 A      2      1
 A      4      2
 A      5      2
 B      8      3
 B      9      3
 A      12     4
 A      13     4

我要做的是识别具有相同cId的连续seq值,然后对它们进行编号。

我在考虑使用Lag函数来确定先前的seq值,然后设置连续列,但在遇到下一个中​​断时不知道如何递增值。

SELECT [cId], 
       [Seq],
       CASE WHEN [Seq] - 1 = LAG([Seq], 1, [Seq]) OVER ( ORDER BY [Seq])  THEN 1 
       ELSE 2 END as consecutive
FROM #ConsecutiveData

此查询将在每个序列的开头旁边放置一个2。那是我最接近的。

1 个答案:

答案 0 :(得分:3)

我认为作者没有使用MySQL,因为据我所知,MySQL中没有LAG函数。

以下是MSSQL的可能解决方案:

SELECT
    cid,
    seq,
    DENSE_RANK() OVER (ORDER BY seq - row_num) consecutive
  FROM (
    SELECT
        cid,
        seq,
        ROW_NUMBER() OVER (ORDER BY seq) row_num
      FROM
        test_table
  ) data
;

检查SQLFiddle: SQLFiddle Example