2
votes

données des 4 derniers trimestres

Je souhaite récupérer les données des 4 derniers trimestres, y compris le trimestre en cours. Supposons que si j'exécute la requête le 30-MAR-2019 , alors je veux des données du 01-APR-2018 au 31-MAR-2019 et si j'exécute la requête le 01-avr-2019 alors je veux des données entre le 01-JUL-2018 et le 30-JUN-2019 < / p>

Pourriez-vous s'il vous plaît m'aider sur le même sujet


0 commentaires

4 Réponses :


-1
votes

Vous pouvez faire:

select (trunc(sysdate, 'Q') + interval '3' month) as next_quarter_start,
       (trunc(sysdate, 'Q') + interval '15' month) - interval '1' day as next_quarter_end 
from dual;



0
votes

cela fonctionnera:

select TRUNC(sysdate+1, 'Q') - interval '9' month,TRUNC(sysdate+1, 'Q') + 
interval '3' month -1
from dual  ;

01-JUL-2018 30-JUN-2019

select TRUNC(to_date('30-MAR-2019')+1, 'Q') - interval '9' 
month,TRUNC(to_date('30-MAR-2019')+1, 'Q') + interval '3' month -1
from dual  ;

01-APR-2018 31-MAR-2019


1 commentaires

il donne le résultat du 5 trimestre ....... supposons que si j'exécute une requête aujourd'hui (16-AVR-2019), le résultat devrait être du 01-JUL-2018 au 30-JUN-2019. si je cours le 30-MAR-2019, le résultat devrait être du 01-AVR-2018 au 31-MAR-2019.



0
votes

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

Cette solution calcule le jour de départ de la fourchette en soustrayant 9 mois de la date cible puis en tronquant avec le masque 'Q' qui nous donne le premier jour du trimestre. Nous calculons ensuite cette date à nouveau , soustrayons un jour puis ajoutons 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 peut y avoir une solution plus astucieuse, mais c'est la fin de ma pause café :)


0 commentaires

0
votes

Ceci est dynamiquement:

With param as (
  Select 
    to_date(extract(year from add_months(sysdate,-12)) || 
            lpad((floor(extract(month from add_months(sysdate,-12))/3)*3)+1,2, '0') || '01', 
            'yyyymmdd') first_date 
    from dual
)
Select 
  level                                               quartal,
  Add_months(first_date, ((level-1)*3))               from_dat,
  Last_day(add_months(first_date, ((level-1)*3)+3)-1) to_dat
From param
connect by level <= 4;


0 commentaires