[MS SQL] Тестовая задача
От: it.sting  
Дата: 24.05.16 03:46
Оценка:
Здравствуйте!

Есть задачка:

Пропущенные интервалы натурального ряда — решение принимается в виде скрипта, содержащего Transact-SQL с запросом(-ами) для получения ожидаемой выборки.
В базе данных имеется таблица, хранящая натуральные числа без повторений. Необходимо вывести отсутствующие интервалы.
declare @values as table
(
[number] int not null -- значение (уникальное значение в рамках таблицы)
)

/* Тестовая ситуация */
insert into @values
(
[number]
)
values (1), (2), (3), (5), (9)

/* Ожидаемый результат */
/*
left right
4 4
6 8
*/


  Мое решение
declare @values as table ( [number] int not null)

insert into @values ( [number] ) values (1) , (2) , (3) , (5) , (9)

declare @t2 as table ([a] int not null, [b] int not null default 0)
insert into @t2 ([a]) select * from @values order by [number];
select * from @t2

UPDATE t
SET b = isnull((select top 1 a from @t2 tt where tt.[a]>t.a order by a), a) — a
FROM @t2 t

select * from @t2 where b > 1

declare @res as table ( [left] int not null, [right] int not null )

insert @res([left], [right]) select [a] + 1, [a] + [b] — 1 from @t2 where b > 1
select * from @res


Я не очень хорошо знаю sql.
Умные люди говорят, что можно сделать это без временных таблиц и UPDATE.
Подскажите как?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.