2013-11-25 36 views
4

我有一個包含「ID」列的表。 此列中存在1000至9999的不同數字ID。 (1000,1001 .....,5000,5001 ....,8000,8001 .... 9000 ... 9999)。 現在我需要一個「通用」查詢,這將使我在此列中出現不同的起始id序列號。 例如,期望的輸出需要SQL查詢來訪問表中存在的不同序列號

1000, 
5000, 
8000, 
9000 

如果將來7000系列中的ID列被添加,則相同的查詢的輸出應該包括7000也以列表等

1000,5000,7000,8000,9000 
+2

問題要求代碼必須說明問題的一小部分的理解正在解決。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。 – 2013-11-25 07:08:36

+0

不,不喜歡這樣。通用的數據 – Raj

回答

1

嘗試這個

SELECT min(id) from tablename group by SUBSTRING(id, 1, 1) 
1

嘗試這個和其2零..

select * from table where id like '%000' or id like '%00'; 
+0

我會以爲ID列不是字符串 –

+0

@ user2310289我試過了,它的工作 –

+0

@ user2310289:解決方案是依靠隱式數據類型轉換和SQL Server和MySQL(兩個DBMS在問題中標記)在數據類型檢查時相當寬容。在具有更嚴格數據類型檢查的DBMS上查詢將失敗(例如Postgres)。 –

4

另一種方式來做到這一點,如果你的系列每千

0123開始

這裏是SQLFiddle演示


現在,這裏是它把在ID值的每一個「孤島」作爲系列(值,其中下一=分組+ 1的序列)的通用方法。這樣,一系列可以就任意值停止

SELECT t1.id 
    FROM table1 t1 LEFT JOIN table1 t2 
    ON t1.id = t2.id + 1 
WHERE t2.id IS NULL 

這裏是SQLFiddle演示

+0

很多更好的解決方案 –

+0

感謝peterm。它甚至更好:) – Raj