Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2008, 10h12   #1
Membre régulier
 
Inscription : juillet 2005
Messages : 175
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 175
Points : 80
Points : 80
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 :
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
dcollart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 14h35   #2
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Bonjour,


Que penses tu de :

Code :
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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h58.


 
 
 
 
Partenaires

Hébergement Web