Вот как я это понял:
SQL> with test (curdate) as
2 (select date '2019-09-24' from dual union all
3 select date '2015-03-12' from dual
4 ),
5 inter as
6 (select curdate,
7 to_number(to_char(curdate, 'mm')) curdate_mon
8 from test
9 )
10 select curdate,
11 case when curdate_mon <= 6 then add_months(trunc(curdate, 'yyyy'), -12)
12 else add_months(trunc(curdate, 'yyyy'), -6)
13 end prev_start,
14 case when curdate_mon <= 6 then add_months(trunc(curdate, 'yyyy'), -6) - 1
15 else trunc(curdate, 'yyyy') - 1
16 end prev_end,
17 --
18 case when curdate_mon <= 6 then add_months(trunc(curdate, 'yyyy'), -6)
19 else trunc(curdate, 'yyyy')
20 end first_start,
21 case when curdate_mon <= 6 then trunc(curdate, 'yyyy') - 1
22 else add_months(trunc(curdate, 'yyyy'), 6) - 1
23 end first_end
24 from inter;
CURDATE PREV_START PREV_END FIRST_STAR FIRST_END
---------- ---------- ---------- ---------- ----------
24.09.2019 01.07.2018 31.12.2018 01.01.2019 30.06.2019
12.03.2015 01.01.2014 30.06.2014 01.07.2014 31.12.2014
SQL>