यह दिनांक-श्रृंखला के साथ अंतराल और द्वीप समस्या का एक प्रकार है। मेरा सुझाव है कि left join
. का उपयोग करें यह पता लगाने के लिए कि द्वीप कहाँ से शुरू होते हैं। फिर एक संचयी योग और एकत्रीकरण:
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;