Курсор будет самым быстрым, но вот запрос SELECT, который сделает это. Обратите внимание, что вместо "до N" дней вместо 2 вам придется заменить таблицу Two таблицей целых чисел от 0 до N-1 (и эффективность будет ухудшаться).
Я признаю, что не совсем понятно, что вы хотите, но я предполагаю, что вам нужны диапазоны строк, которые содержат как минимум две строки, и в которых последовательные строки находятся на расстоянии максимум 2 дня. Если даты увеличиваются вместе с идентификаторами, это должно работать.
with Two as (
select 0 as offset union all select 1
), r2(ID, Date_Created_o, dr) as (
select
ID, Date_Created+offset,
Date_Created + offset - dense_rank() over (
order by Date_Created+offset
) from r cross join Two
)
select
min(ID) as start, max(ID) as finish
from r2
group by dr
having min(ID) < max(ID)
order by dr;