我在 SQL Server 数据库表中有一列,有一列包含整数值,我想获得最大值,除非系列中有间隙,然后我想获得第一个缺失值。
例如,从下表中,我希望得到值 4
1
2
null
3
上面很简单,但是如果表包含如下数据,我怎样才能找到我缺少的 id,在这种情况下它将是 8
1
3
2
4
null
5
7
6
null
10
9
/////////////////
编辑:
我最初实现了@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)
但它没有用,有什么想法可以解决这个问题吗?
谢谢