Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Daten des letzten 4 Quartals

Der schwierige Teil besteht darin, den letzten Tag des Quartals zu erhalten.

Diese Lösung berechnet den Starttag des Bereichs, indem 9 Monate vom Zieldatum abgezogen und dann mit dem 'Q' abgeschnitten werden Maske, die uns den ersten Tag des Quartals gibt. Wir berechnen dieses Datum dann neu , subtrahieren Sie einen Tag, addieren Sie dann zwölf Monate hinzu, und das ergibt den letzten Tag des aktuellen Quartals:

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
/

Es gibt vielleicht eine bessere Lösung da draußen, aber das ist das Ende meiner Kaffeepause :)