2014-01-17 35 views
-2

我有一個數字列表。有數據記錄,請參閱示例{1,7,10,11,12,19,20}。我想用SQL從一個特定的X得到下一個「自由」號:SQL Oracle,數字列數據中的下一個空閒數字

>8 for x=7 
>8 for x=8 
>13 for x=10 
>21 for x=20 

沒有任何人有一個想法?

好的:我想插入一個'x'的東西。該列是唯一的,所以當表中已經有'7'時,我不能在表中放入x = 7的東西。所以我想要一個返回'8'的例程,如果已經有一個'7'的記錄。或'9',如果已經有'8'。

以僞SQL:

x = 7 // for example 
    select COL from myTable where COL= (x or if x does not exist, the y : y > x, y - x smallest possible) 
+0

我不知道這裏的邏輯。 –

+0

您能否詳細說明 – zee

+1

「免費」是什麼意思。你的例子沒有意義。 – OldProgrammer

回答

3

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE NUMBERS 
    ("NUM" int) 
; 

INSERT ALL 
    INTO NUMBERS ("NUM") 
     VALUES (1) 
    INTO NUMBERS ("NUM") 
     VALUES (7) 
    INTO NUMBERS ("NUM") 
     VALUES (10) 
    INTO NUMBERS ("NUM") 
     VALUES (11) 
    INTO NUMBERS ("NUM") 
     VALUES (12) 
    INTO NUMBERS ("NUM") 
     VALUES (19) 
    INTO NUMBERS ("NUM") 
     VALUES (20) 
SELECT * FROM dual 
; 

查詢1

select min(n.VAL) as NextFree 
from (
    SELECT LEVEL as VAL 
    FROM DUAL 
    CONNECT BY LEVEL <= 100000 
    ORDER BY LEVEL 
) n 
left outer join NUMBERS d on n.VAL = d.NUM 
where d.NUM is null 
    and n.VAL >= 10 

Results

| NEXTFREE | 
|----------| 
|  13 | 
+0

偉大的解決方案,非常感謝。我只需要做一個更改:最後一行n.VAL> = 10。 – Ferenjito

相關問題