2015-07-13 51 views

回答

2

使用這樣的事情:

SELECT Min(ID) As firstMissedID 
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY ID) rn 
    FROM std) dt 
WHERE rn < ID 
+0

表是'std',列名是'id '在0-10項之間有9個記錄,其中3號缺失。現在請給我具體的查詢。 –

0

不知道這是最好的方法,但它會工作。

創建臨時表與列,以保存整數值 = @ temptbl1

與填充值表1:1000,然後運行此查詢將返回唯一的,如果它不包含在你的數據表中的條目。

select value from @temptable1 where value not in (select Othervalue from othertable) 

select語句將返回所有缺少的值。

0

我假設數列將只有數從0到1000

declare @minnumber int 
declare @missingnumber int 

select @minnumber=min(number) from Test 

if(@minnumber=0) 
begin 
    --500500 is the sum of 1 to 1000 number 
    select @missingnumber=500500-sum(number) from Test 
end 
else 
begin 
    set @missingnumber=0 
end 
+0

巧妙。得到了我的投票。但是,如果OP假設是錯誤的。那麼方法也是如此。 – Drew

+0

整潔的解決方案。但只適用於固定的數據集。 –

+0

謝謝:))但是,如果假設是真的,那麼總是沒有問題..我認爲它會更快。我們也可以將500500的硬編碼值移到n個值的總和中。創建任何額外的表以及繁重的代碼。 –

0

使用tally table獲得1000行列表,然後使用LEFT OUTER JOINNOT EXISTS尋找失蹤的人數

WITH Tally (n) AS 
(
    -- 1000 rows 
    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) 
    FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n) 
    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n) 
    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n) 
) 
SELECT Min(n) 
FROM Tally T 
     LEFT OUTER JOIN YOURTABLE Y 
        ON T.N = Y.MISSING_NUM_COLUMN 
WHERE Y.MISSING_NUM_COLUMN IS NULL 

如果您想查找缺失的數字列表,請從最近的select查詢中刪除MIN運算符。

SELECT Missing_Numbers = n 
FROM Tally T 
     LEFT OUTER JOIN YOURTABLE Y 
        ON T.N = Y.MISSING_NUM_COLUMN 
WHERE Y.MISSING_NUM_COLUMN IS NULL 
相關問題