Решение GMB, безусловно, является каноническим подходом к решению этой проблемы, рассматривая его как вариант пробелов и островков. Мне было интересно, если есть способ сделать это без двух уровней подзапросов. И есть:
select coalesce(lag(next_x) over (order by x), first_x) as lower,
x as upper
from (select t.*,
first_value(x) over (order by x) as first_x,
lead(x) over (order by x) as next_x
from t
) t
where next_x is null or next_x > x + 10;
Здесь - это дБ <> скрипка.
Было бы интересно сравнить производительность на большом наборе данных - 2 оконные функции + агрегация против 3 оконных функций + фильтрация.