Oracle
 sql >> Base de données >  >> RDS >> Oracle

données des 4 derniers trimestres

La partie délicate est d'obtenir le dernier jour du trimestre.

Cette solution calcule le jour de début de la plage en soustrayant 9 mois de la date cible, puis en tronquant avec le 'Q' masque qui nous donne le premier jour du trimestre. Nous calculons ensuite cette date encore , soustrayez un jour puis ajoutez douze mois et cela donne le dernier jour du trimestre en cours :

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
/

Il y a peut-être une solution plus astucieuse, mais c'est la fin de ma pause-café :)