SQL - 选择前n行,其中n个行值为顺序+ 1

时间:2016-06-15 11:28:54

标签: sql sql-server tsql

我有一个包含行ID和Cct编号的表。 Cct列可以是+1顺序,具体取决于前面的select语句。

我想找到下一行cct no的第一行。增量+ 1到n-1。

样品

ID    Cct
1      1
2      3
7      5
8      6
10     9
11     10
12     11

如果n = 2我想选择ID为7的行,因为这是第一次下n行cct值为value + 1

如果n = 3我想选择ID为10的行,因为下一个n-1行增加+ 1

希望这很清楚

1 个答案:

答案 0 :(得分:2)

我想我明白了。您正在寻找数据中的序列长度,其中序列递增1。

您可以使用row_number()和减法来识别它们 - 序列的差异是固定的。

所以:

select top 1 min(id), count(*) as length
from (select s.*, (cct - row_number() over (order by id)) as grp
      from sample s
     ) s
group by grp
having count(*) >= @n
order by min(id)

这是第一次在数据中出现长度(至少)@n的序列。