我在SQL Server数据库表中有一列,有一列包含整数值,我想获得最大值,除非系列中存在差距,那么我想获得第一个缺失的值。如何获得包含顺序int值的列中的第一个空位
例如从下面的表,我希望得到价值4
1
2
null
3
以上是简单的,但如果表中包含类似下面的数据,我怎么能找到我缺少其中的ID,这种情况下,这将是8
1
3
2
4
null
5
7
6
null
10
9
//////////////////
编辑:
I最初实现了@ 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
)
这工作得很好但是如果所有的iValue
字段为空,然后我没有得到任何东西,但我想它返回1,因为这将是第一个值在系列中,显然我可以在C#代码中处理这个问题,但是如果上面的查询没有返回一行,我相信必须有返回1的方法吗?
我已经改变了顶级Select Number
与SELECT Coalesce(Number, 1)
但它没有工作,任何想法如何解决这个问题?
感谢
什么版本的SQL Server? – 2012-07-17 09:35:47
SQL Server 2008 R2 – 03Usr 2012-07-17 09:37:37
您似乎在两个地方都使用了tblNumbers。在WHERE子句中,将其更改为具有您在问题中显示的数据的实际表格。 tblNumbers应该有1到n个连续的运行号码。 – vmvadivel 2012-07-18 02:47:51