IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

cumul sur 12 mois glissants en fonction analytique


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Points : 21
    Points
    21
    Par défaut cumul sur 12 mois glissants en fonction analytique
    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 :
    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
    Le problème étant que j'ai des "trous" dans ma raquette et aussi des "doublons".

    Alors j'ai trouvé çà qui fonctionne :
    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
    Le problème étant que c'est trèèèèès lourd.

    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

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Et bien utilisez RANGE au lieu de ROWS dans votre fenêtre !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Et bien utilisez RANGE au lieu de ROWS dans votre fenêtre !
    J'ai essayé, mais je dois mal m'y prendre car ça ne fonctionne pas.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Quelle est votre version d'Oracle ?
    Qu'avez-vous écrit précisément ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    Je suis 9i.

    Et j'avais écrit des bêtises.

    Effectivement si j'écris bien le RANGE ça fonctionne.
    Il fallait juste que je vire tout ce qu'il y a dans "Order By" à part mon mois. et que je mette 99 (et non pas 100).

    Maintenant faut que je fasse la même avec des trimestres qui sont sous la forme 2010T1, 2010T2 etc.
    Mais je pense qu'en faisant la même chose avec un REPLACE (trimestre, 'T', '0') ça devrais le faire.

    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL 2008] Requête : Cumul sur 12 mois glissants
    Par mad_martigan dans le forum Développement
    Réponses: 4
    Dernier message: 23/12/2010, 17h35
  2. Cumul sur 12 mois glissants
    Par jerems113 dans le forum Cognos
    Réponses: 7
    Dernier message: 09/12/2010, 09h36
  3. Recherche par date sur 12 mois glissant
    Par kiki.gaby dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/10/2009, 16h17
  4. Optimisation Vue sur 12 mois glissants
    Par mout1234 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/06/2009, 13h42
  5. Somme cumulative sur 12 mois glissant
    Par Ptij16 dans le forum Deski
    Réponses: 6
    Dernier message: 13/07/2007, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo