如何在包含连续int值的列中获得第一个间隙

03U*_*Usr 0 sql sql-server sql-server-2008-r2

我在SQL Server数据库表中有一个列,有一个包含整数值的列,我希望得到最大值,除非系列中有间隙,然后我想获得第一个缺失值.

例如,从下表,我希望获得价值4

1
2
null
3
Run Code Online (Sandbox Code Playgroud)

以上很简单,但是如果表中包含如下数据,我怎样才能找到我遗漏的id,在这种情况下它将是8

1
3
2
4
null
5
7
6
null
10
9
Run Code Online (Sandbox Code Playgroud)

//////////////////

编辑:

我最初实现了@ podiluska的答案,并且接受了它然而当我用超过10K行的表进行测试时它非常慢,所以我已经采取@vmvadivel的答案并稍微改变它,如下所示,它的工作速度非常快,但仍然不是100%我想要的:

SELECT Number
FROM 
(
    SELECT ROW_NUMBER() OVER(ORDER BY iValue) AS Number
    FROM tblNumbers WHERE iValue IS NOT NULL
) temp
WHERE Number NOT IN 
(
    SELECT iValue FROM tblNumbers WHERE iValue IS NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

这很好用但是如果所有的iValue字段都是null然后我什么都没有回来,但我希望它返回1,因为它将是系列中的第一个值,显然我可以在C#代码中处理这个但我确定如果上面的查询没有返回一行,必须有一种方法返回1?

我已经改变了顶层Select NumberSELECT Coalesce(Number, 1),但它没有工作,任何想法如何解决这个问题?

谢谢

pod*_*ska 5

如果#t是你的桌子

select min(t1.number)+1 
from #t t1
left join #t t2 
           on t1.number = t2.number-1
where t2.number is null
Run Code Online (Sandbox Code Playgroud)