Использование может использовать dense_rank()
для генерации последовательности. Когда вы вычтете это из даты, вы определите смежные последовательные даты.
Итак:
select min(orderdate), max(orderdate)
from (select o.*, dense_rank() over (order by orderdate) as seqnum
from orders o
) o
group by dateadd(day, -seqnum, orderdate)
order by min(orderdate);
Вам нужно dense_rank()
, потому что ваши данные имеют дубликаты.
EDIT:
Чтобы найти прыжки, используйте LEAD()
:
select dateadd(day, 1, orderdate),
dateadd(day, -1, next_orderdate)
from (select orderdate, lead(orderdate) over (order by orderdate) as next_orderdate
from (select distinct orderdate orders o) o
) o
where next_orderdate > dateadd(day, 1, orderdate);