@Ivan_star

Как собрать диапазоны из битого списка?

Дано: список значений от 1 до 1000000 в какой-либо таблице oracle. Список битый, то есть нет каких-то значений, то есть: 1,2,3,5,6,7,8,10,15,16,17.....
Задача: сформировать непрерывные диапазоны в этом списке, выводя начальное и конечное значение каждого непрерывного диапазона? Из примера выше получилось бы:
1-3
5-8
15-17...
Как это сделать средствами pl/sql?
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ответы на вопрос 1
unfilled
@unfilled
У меня под рукой только ms sql, но идея должна быть понятна
declare @n table (id int);
insert into @n values (1), (2), (3), (5), (6), (7), (8), (15), (16), (20), (21), (22), (23), (30), (31), (55)

select diff, min(id) as range_from, max(id) as range_to
from (
	select 
		  id
		, id - row_number() over (order by id) as diff
	from @n
) x
group by diff
having min(id) <> max(id) -- опционально, если нужны именно диапазоны
order by diff
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы