Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 15/06/2011, 16h41   #1
Membre régulier
 
Ingénieur développement logiciels
Inscription : février 2007
Messages : 174
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2007
Messages : 174
Points : 70
Points : 70
Par défaut requete oracle pour obtenir des montant sur 12 mois glissant

Bonjour,

je suis novice en ORACLE, plus habitué à du SQL. Dans mon projet, j'ai besoin d'obtenir la somme des montant versés sur 12 mois glissant, j'ai une table montantverse qui a pour champ le montantverse, le mois et l'année.

je souhaiterais que ma requête retourne la somme des montant versés sur les 12 mois précédent le mois et l'année que je passerais en paramètre.

par exemple, je souhaite obtenir la somme des montants versés précédent mars 2010, j'envoie en paramètre le mois 03 et l'année 2010, ma requête doit me retourner la somme des montant versés depuis mars 2009 jusque mars 2010.

je suis bien bloqué par cette requête car je n'arrive pas à comprendre quelle fontion utiliser, ni comment les utiliser.

en gros j'en suis à ce point là dan sma requête:

Code :
1
2
SELECT sum(montantverse), mois, annee FROM t_vt_montantverse 
WHERE  ???
Cordialement
gueulederack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 16h47   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Une mauvaise modélisation complexifie toujours les solutions !
Quels sont les types des données mois et annee ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 16h54   #3
Membre régulier
 
Ingénieur développement logiciels
Inscription : février 2007
Messages : 174
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2007
Messages : 174
Points : 70
Points : 70
ceux sont des chaîne de caractères, le problème c'est que je ne peux pas changer la base de donnée, je n'ai pas la main dessus, est-il possible de créer un champ date avec ces 2 chaînes, par exemple

Code :
1
2
 
to_date(to_date(mois, 'MM'),to_date(annee,'YYYY'))
gueulederack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 17h45   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Oui, c'est pour cette raison que j'avais besoin de connaître le type de ces données. En chaîne de caractère, il suffit de concaténer :
Code :
1
2
SELECT to_date('2010' || '03', 'yyyymm') AS dt
  FROM dual;
Donc pour votre requête :
Code :
1
2
3
4
  SELECT annee, mois, sum(montantverse)
    FROM t_vt_montantverse 
   WHERE to_date(annee || mois, 'yyyymm') BETWEEN -- je vous laisse chercher un peu !
GROUP BY annee, mois
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 11h37   #5
Membre régulier
 
Ingénieur développement logiciels
Inscription : février 2007
Messages : 174
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2007
Messages : 174
Points : 70
Points : 70
je me demander comment concaténer dans oracle. Merci bien.

j'ai donc fait cette requête

Code :
1
2
3
4
5
 
   SELECT mois, annee, sum(montantverse)
    FROM t_vt_montantverse 
   WHERE to_date(annee || mois, 'yyyymm')  BETWEEN (add_months(to_date(annee || mois, 'yyyymm'), -12)+1) AND to_date(annee || mois, 'yyyymm')
   GROUP BY annee, mois
mais j'ai l'impression que les montant versés ne s'additionnent pas sur les 12 mois précédent
gueulederack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 11h54   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Non effectivement, il faut utiliser vos paramètres dans le BETWEEN !
Actuellement vous utilisez vos colonnes, si je condense un peu c'est comme si vous écriviez WHERE annee = annee.
Cette condition étant toujours vérifiée c'est comme s'il n'y avait pas de filtre !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 14h20   #7
Membre régulier
 
Ingénieur développement logiciels
Inscription : février 2007
Messages : 174
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2007
Messages : 174
Points : 70
Points : 70
OK, j'ai compris, j'étais vraiment stupide ce coup là, voici ma requête:

Code :
1
2
3
4
5
 
   SELECT mois, annee, sum(montantverse)
    FROM t_vt_montantverse 
   WHERE to_date(annee || mois, 'yyyymm')  BETWEEN (add_months(to_date('2010' || '03', 'yyyymm'), -12)+1) AND to_date('2010' || '03', 'yyyymm')
   GROUP BY annee, mois
avec 2010 et 03 passé en paramèter.

Merci beaucoup
gueulederack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 15h06   #8
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Attention par contre aux bornes, là votre requête prends du 2 mars 2009 aux 1er mars 2010 bornes incluses.
À mon avis, du 1er mars 2009 au 28 février 2010 serait plus cohérent :
Code :
1
2
3
4
5
6
7
SELECT add_months(to_date('2010' || '03', 'yyyymm'), -12) AS dt1
     ,            to_date('2010' || '03', 'yyyymm')-1     AS dt2
  FROM dual;
 
DT1        DT2       
---------- ----------
01/03/2009 28/02/2010
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h18.


 
 
 
 
Partenaires

Hébergement Web