我在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