2016-06-15 54 views
-1

我有一个行ID和Cct号码的表。根据前面的select语句,Cct列可以是+1顺序。SQL - 选择前n行,其中后n个行值是连续的+ 1

我想找到第一行,其中的下一行n 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值是值+1

如果n = 3 I要选择具有ID是10行作为下一个n-1个行由+ 1

希望增加这是明确的

+0

我不遵循你想要做的逻辑。 –

+0

这里是什么? – Avi

回答

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出现在数据中的第一时间。

+0

这是正确的。我还有一个我没有考虑过的标准。最小cct值只需满足以下'(cct + 2)%3 = 0'。这是可以实现的吗? – user1781272

+0

@ user1781272。 。 。我不明白这是怎么回事,除非你只是想在子查询中添加一个where子句。否则,请提供另一个问题样本数据和问题的解释。 –

+0

@ user1781272我明白你在找什么,我在这里回答了这个问题[链接](http://stackoverflow.com/questions/37836248/select-first-row-where-next-2-rows-increment-通过-1和 - rowval -2-是-divisibl/38205347#38205347) – MtwStark