insert into your_table
values
(101,'jan','mar',10),
(101,'feb','mar',20),
(101,'may','jul',30);
3 rows affected
hidden batch(es)
Select *
from
(
select
case when tab2.SDO is null then tab1.SDO else tab2.SDO end as SDO,
case when tab2.Startmonth is null then tab1.Startmonth else tab2.Startmonth end as Startmonth,
case when tab2.endmonth is null then tab1.endmonth else tab2.endmonth end as endmonth,
case when tab2.rate is null then tab1.rate else tab2.rate end as rate
from your_table tab1
left join your_table tab2
on (tab2.Startmonth > tab1.Startmonth
and tab2.Startmonth < tab1.endmonth ) or
tab2.Startmonth is null
) as tab
group by SDO,Startmonth,endmonth,rate
having count(*) = 1