|
|
От: | 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 | |