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 :

[Oracle 9i] : Fonctions analytiques


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Par défaut [Oracle 9i] : Fonctions analytiques
    Bonjour,

    je souhaite écrire une requête permettant de compter le nombre de création des enregistrements par an (la table contient le champs d_creation contenant la date à laquelle l'enregistrement a été créé), chaque année devant cumuler le total des années antérieures

    Le nombre d'enregistrement comptés pour 2008 doit donc correspondre au nombre total d'enregistrements dans la table, celui de 2007 le nombre d'enregistrement créés jusqu'au 31/12/2007...

    J'ai réussi à écrire une requête permettant d'obtenir le résultat souhaité :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    SELECT t1.annee, SUM(t2.nombre)
      FROM
         (
    	 	SELECT DISTINCT TO_CHAR(d_creation,'YYYY') annee, COUNT(*) nombre
    		  FROM la_table
    	     GROUP BY TO_CHAR(d_creation,'YYYY')
         ) t1,
         (
    		SELECT DISTINCT TO_CHAR(d_creation,'YYYY') annee, COUNT(*) nombre
              FROM la_table
              GROUP BY TO_CHAR(d_creation,'YYYY')
         ) t2
     WHERE t1.annee >= t2.annee
     GROUP BY t1.annee
     ORDER BY t1.annee DESC
     ;
     
    ANNEE	SUM(T2.NOMBRE)
     
    2008	19843
    2007	19567
    2006	16172
    2005	14741
    2004	13015
    2003	9227
    2002	8469
    2001	7450
    2000	6696
    1999	6068
    1998	5390
    1997	4960

    J'aimerais simplifier cette requête en utilisant des fonctions analytiques. Je n'y suis pas encore parvenu.

    Pouvez-vous me donner quelques pistes ?

    Merci et bonne journée

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    Bonjour,


    Que penses tu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select
      annee,
      nombre,
      sum(nombre) over(order by annee) nbr_cumule 
    from
      ( 
        SELECT  TO_CHAR(d_creation,'YYYY') annee, COUNT(*) nombre
        FROM    la_table
        GROUP BY TO_CHAR(d_creation,'YYYY')
      )

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

Discussions similaires

  1. Fonction analytique Oracle
    Par sebastien00 dans le forum SQL
    Réponses: 3
    Dernier message: 23/03/2010, 10h52
  2. Fonction Analytique Oracle
    Par cadabricadabra dans le forum SQL
    Réponses: 2
    Dernier message: 12/12/2008, 15h11
  3. fonction analytiques sous oracle RDB.
    Par pdelorme dans le forum SQL
    Réponses: 3
    Dernier message: 19/03/2008, 11h18
  4. Réponses: 4
    Dernier message: 29/01/2008, 08h29
  5. [SQL] [Oracle 9.2] fonctions analytiques grosses tables
    Par Hugues_78 dans le forum Oracle
    Réponses: 11
    Dernier message: 10/10/2006, 18h27

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