2016-06-15 49 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