2014-01-17 3 views
-2

У меня есть таблица с числовым столбцом. Имеются записи данных, давайте возьмем для примера {1,7, 10, 11, 12, 19, 20}. Я хочу использовать SQL, чтобы получить следующий «свободный» номер от конкретного х:SQL Oracle, следующий свободный номер из числа данных столбца

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

Кто-нибудь есть идеи?

ОК: Я хочу вставить что-то с помощью «x». Столбец уникален, поэтому я не могу положить что-то с x = 7 в таблицу, когда там уже есть «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

Смежные вопросы