Il s'agit d'un type de problème d'espaces et d'îlots avec les chaînes de date. Je suggérerais d'utiliser une left join
pour trouver où commencent les îles. Puis une somme cumulée et une agrégation :
select emp_id, title, min(start_date), max(end_date)
from (select t.*,
sum(case when tprev.emp_id is null then 1 else 0 end) over
(partition by t.emp_id, t.title order by t.start_date) as grouping
from t left join
t tprev
on t.emp_id = tprev.emp_id and
t.title = tprev.title and
t.start_date = tprev.end_date + 1
) t
group by grouping, emp_id, title;