2017-02-15 38 views
3

號碼列表之間丟失號碼我有10個用戶數其中一些已被刪除,而當我在節目選擇列如下:得到我的數據庫使用SQL

missing_user_number: 
     1, 
     2, 
     5, 
     8, 
     10, 

,我需要知道是否有一個腳本,可以讓丟失號碼這樣的,我不希望刪除的數據後面,我只是想丟失號碼作爲integrs數據:

missing_user_number: 
     3, 
     4, 
     6, 
     7, 
     9, 
+0

你使用哪個dbms? (一些產品特定的SQL可以得心應手。) – jarlh

+0

sql server 2008 – azza

回答

5

在SQL的大多數版本,它實際上更容易得到範圍的缺失值,大鼠她不是每個缺少的值:

select user_number + 1 as missing_range_start, next_user_number - 1 as missing_range_end 
from (select t.*, 
      lead(user_number) over (order by user_number) as next_user_number 
     from t 
    ) t 
where user_number <> user_number + 1; 

注:這僅發現內部丟失號碼,如在你的問題的例子。

+0

謝謝你,這對我很好用 – azza

0

您可以創建一個包含全部10個用戶號碼的內嵌數字表。然後LEFT JOIN你的表爲了得到缺失的數字:

SELECT t1.n AS missing_user_number 
FROM (
    SELECT 1 AS n UNION ALL SELECT 2 ... SELECT 10 
) AS t1 
LEFT JOIN mytable AS t2 ON t1.n = t2.user_number 
WHERE t2.user_number IS NULL 
相關問題