Это проблема пробелов и островов, которую легче всего решить с разницей в числах строк:
select type, count(*), min(date_status), max(date_status)
from (select t.*,
row_number() over (order by date_status) as seqnum,
row_number() over (partition by type order by date_status) as seqnum_t
from t
) t
group by type, (seqnum - seqnum_t)
order by min(date_status);
Почему эту работу немного сложно объяснить. Я обнаружил, что если кто-то смотрит на результаты подзапроса, этот человек обычно видит, как разница двух столбцов с номерами строк определяет группы смежных type
s.