Đây là một vấn đề về khoảng cách và những hòn đảo. Có nhiều cách tiếp cận khác nhau, nhưng một cách đơn giản sử dụng sự khác biệt của số hàng:
with paaf as (<your first query here>
)
select paaf.assignment_id,
paaf.position_id,
min(paaf.effective_start_date) as effective_start_date,
max(paaf.effective_end_date) as effective_end_date
from (select paaf.*,
row_number() over (order by effective_start_date) as seqnum,
row_number() over (partition by position_id order by effective_start_date) as seqnum_p
from paaf
) paaf
group by (seqnum - seqnum_p), position_id, assignment_id;