Oracle
 sql >> Database >  >> RDS >> Oracle

dati degli ultimi 4 trimestri

La parte difficile è arrivare l'ultimo giorno del trimestre.

Questa soluzione calcola il giorno di inizio dell'intervallo sottraendo 9 mesi dalla data target e quindi troncando con il 'Q' maschera che ci regala il primo giorno del trimestre. Quindi calcoliamo quella data di nuovo , sottrai un giorno quindi aggiungi dodici mesi e questo dà l'ultimo giorno del trimestre in corso:

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
/

Potrebbe esserci una soluzione più intelligente là fuori, ma questa è la fine della mia pausa caffè :)