Добрый день!
Была на собеседование и задали мне вопрос:
есть таблица t одно поле id Значения в поле:1,2,3,5,6,etc.
Необходимо написать запрос, который найдет первую дырку(т.е. пропущенное 4), причем не использовать курсоры и поле не identity(просто по identity есть пример в help)
Как это сделать не знаю ?
помогите мне
А то чувствую себя просто опущенной
Здравствуйте, terma, Вы писали:
T>Как это сделать не знаю ? помогите мне T>А то чувствую себя просто опущенной
Эээ... девушка.. ? Буквально двумя топиками ниже: http://rsdn.ru/Forum/?mid=448164
Hello, "Merle" > > T>Как это сделать не знаю ? помогите мне > T>А то чувствую себя просто опущенной > Эээ... девушка.. ? Буквально двумя топиками ниже: http://rsdn.ru/Forum/?mid=448164
select t1.id + 1
from table1 t1
left join table1 t2 on t2.id = t1.id + 1
where t2.id is null
... << RSDN@Home 1.1 beta 2 >>
— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
находятся границы разрывов, но не разрывы целиком, как это было в исходном вопросе.
дык и мы вроде не благотворительностью занимаемся...
надо ж народу и головой хоть немножко думать ...
... << RSDN@Home 1.1 beta 2 >>
— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
Всем большое спасибо, но когда мне поставили этот вопрос там не шло речи о наличии первой таблицы, где записи упорядочены
была только одна таблица
Видимо, я должна была сама догадатся
Еще раз спасибо
находятся границы разрывов, но не разрывы целиком, как это было в исходном вопросе. > > дык и мы вроде не благотворительностью занимаемся... > надо ж народу и головой хоть немножко думать ...
Здравствуйте, TK, Вы писали:
TK>Может поделишься с общественностью?
TK>Что и было в исходном вопросе.
классическая задача требует найти начала или (интервалы) гэпов.
а вот твоя задача "штатными" средствами (в один-два запроса) не решается.
легко найти надачло и конец гэпа. легко найти "длинну" гэпа.
а вот сформировать отсутствующие "id"-ы — тут привет.
да и надо ли? а если надо, то для чего? я конечно могу щаз накидать простенький универсальный код, но для любой из конкретных задач и "платформ" можно будет написать в разы лучший код.
... << RSDN@Home 1.1 beta 2 >>
— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...
create table test(i int)
insert into test values(1)
insert into test values(5)
insert into test values(6)
insert into test values(10)
insert into test values(100)
declare @max int
set @max = (select max(i) from test)
print @max
with simple(i)
as
(
select 1
union all
select i = i + 1 from simple where i < @max
)
select i from simple
where i not in (select i from test)
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Запроста!
Хаа!
Я так тоже могу, а вот 99.9% процента жаждущих будут ждать выхода юкона...
Чего людей-то зря дразнить?
Здравствуйте, terma, Вы писали:
T>Добрый день! T>Была на собеседование и задали мне вопрос: T>есть таблица t одно поле id Значения в поле:1,2,3,5,6,etc. T>Необходимо написать запрос, который найдет первую дырку(т.е. пропущенное 4), причем не использовать курсоры и поле не identity(просто по identity есть пример в help) T>Как это сделать не знаю ? T>помогите мне T>А то чувствую себя просто опущенной
не надо расстраиваться по таким пустякам, вот как бы я решил эту задачку:
итак есть таблица t со значениями в поле id: 1,2,3,5,6,8,
а вот после такого запроса мы увидим список дыр
select id+1 from t where id not in(select id-1 from t) order by id
результат: 4,7,9. С таким же успехом можно выполнить такой запрос (он вроде как быстрей должен обрабатываться):
select id+1 from t t1 where id+1 not in(select t2.id from t t2 where t2.id>t1.id) order by id
[code]
если вам только одно значение надо (первое) то добавьте TOP 1:
[code]
select TOP 1 id+1 from t where id not in(select id-1 from t) order by id
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Он тебе последнюю запись тоже вернет.
а разве все что после конца данных — это не дыра? одна такая большая замечательная дыра :))
... << RSDN@Home 1.1 beta 2 >>
— сколько программистов надо чтобы заменить сгоревшую лампочку?
— сколько не бери, а лампочку не поменять — проблема аппаратная, программным путем не решается...