Det knepiga är att få den sista dagen i kvartalet.
Den här lösningen beräknar startdagen för intervallet genom att subtrahera 9 månader från måldatumet och sedan trunkera med 'Q'
mask som ger oss den första dagen i kvartalet. Vi beräknar sedan det datumet igen , subtrahera en dag och lägg sedan till tolv månader och det ger den sista dagen i det aktuella kvartalet:
with tgt as ( select date '2019-03-30' as dt from dual
union all select date '2019-02-28' as dt from dual
union all select date '2019-04-01' as dt from dual
)
select trunc(tgt.dt - interval '9' month, 'Q') as range_st,
(trunc(tgt.dt - interval '9' month, 'Q') - 1) + interval '12' month as range_end
from tgt
/
Det kan finnas en smartare lösning där ute, men det här är slutet på min fikapaus :)