Bonjour à tous,
J'ai un petit soucis et j'ai beau chercher je ne trouve pas la solution ni ici, ni ailleurs.
Je souhaite dans une requête faire un colonne de cumul sur 12 mois glissants.
La fonction analytique SUM me parait convenir à mes besoins, sauf que le seul fenêtrage que j'arrive à faire est un fenêtrage sur un nombre de "ROW".
Le problème étant que le nombre de valeur est pour moi aléatoire puisqu'il peut y avoir X lignes.
Pour mieux me faire comprendre j'ai ça qui pourrait correspondre :
Le problème étant que j'ai des "trous" dans ma raquette et aussi des "doublons".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT da.agr_cle_dim ,da.fk_mois ,da.fk_id_indicateur ,da.agr_valeur ,SUM(da.agr_valeur) OVER(PARTITION BY da.fk_id_indicateur ,da.agr_cle_dim ORDER BY da.fk_mois ROWS 11 PRECEDING) agr_glissant_12m FROM dwh_agregat da
Alors j'ai trouvé çà qui fonctionne :
Le problème étant que c'est trèèèèès lourd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SELECT da.agr_cle_dim ,da.fk_mois ,da.fk_id_indicateur ,da.agr_valeur ,SUM(da.agr_valeur) OVER(PARTITION BY da.fk_id_indicateur ,da.agr_cle_dim ORDER BY da.fk_mois ROWS ( SELECT COUNT (1) FROM dwh_agregat sub WHERE sub.agr_cle_dim = da.agr_cle_dim AND sub.fk_id_indicateur = da.fk_id_indicateur AND sub.fk_mois > da.fk_mois - 100 AND sub.fk_mois <= da.fk_mois ) PRECEDING) agr_glissant_12m FROM dwh_agregat da
Existe t'il donc une option qui me permettrait de sommer les "ROWS" répondant à une condition (ici fk_mois > mois - 100).
PS pour ceux qui se poserai la question du pourquoi Mois-100, c'est simplement parce que mes mois sont sous la forme de number 201001, 200912, 200911 etc. Or si l'on fait 201001-100 on obtient 200901 1 ans avant donc
Merci par avance
Partager