2016-07-22 6 views
0

У меня в колонках (ID) значенияВыберите первый отсутствующий идентификатор выше 0

      5 
          6 
          9 

Я хочу, чтобы выбрать первый отсутствующий IDfrom выше 0. Мое желание выберите значение будет равно 1. (если 1 существует, то он будет выбирает 2 и т. д.). Я использую этот код:

SELECT MIN(id) As MinMissingId FROM table1 where id>=0 

Но мой результат первый существующий идентификатор и не пропуская

+0

Это * не * дубликат другого вопроса из-за желания получить «1», если первое пропущенное значение выше. –

ответ

1

Это вернет следующий неиспользованный идентификатор, начинающийся с 1, работает во всех случаях, например. стол пуст или нет пробелов:

WITH cte AS 
(
    SELECT id FROM tab 
    UNION ALL 
    SELECT 0 
) 
SELECT MIN(id) + 1 
FROM cte 
WHERE NOT EXISTS 
(
    SELECT * 
    FROM tab 
    WHERE tab.id = cte.id + 1 
) 
+0

Где я должен указать имя моей таблицы? EX Table1 – user6615498

+0

Ну, это должно быть очевидно, вы кладете его вместо 'tab'. – dnoeth

+0

Спасибо, брат! Такой сложный код для запоминания! – user6615498

0

Вы можете сделать это, опираясь на ответ в вашей связанной question.

select (case when min(id) > 0 then 1 else min(id) + 1 end) 
from table1 t 
where not exists (select 1 
        from table1 t2 
        where t2.id = t.id + 1 
       ); 

Идея состоит в том, чтобы найти первый идентификатор, отсутствующий. Если он больше

+0

i get error Неверное имя объекта 't'. – user6615498

+0

Где я должен использовать свой стол? EX table1 – user6615498