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

Langage SQL Discussion :

Moyenne 5 dernières année pour chaque année?


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 108
    Points
    108
    Par défaut Moyenne 5 dernières année pour chaque année?
    Bonjour!!!

    Je veux faire une requete, si possible, qui me renvoi une moyenne mobile sur 5 ans pour chaque année. (moyenne 5 dernières années incluant l'année courante) Exemple : pour 1991, je voudrait la moyenne de (1987, 1988, 1989, 1990 et 1991)

    J'ai fais cette requete qui fonctionne bien, mais elle me donne que la moyenne mobile pour une seule année, celle qu'on spécifie.
    J'aimerais que la requete me renvoi pour toutes les années si c'est possible.

    SELECT AVG(nombreANNEE_STATISTIQUE) as moyenne
    FROM ANNEE_STATISTIQUE, STATISTIQUE
    WHERE numeroANNEE >= anneeDebut - 4 AND numeroANNEE <= anneeDebut AND numeroNUMEROSERIE = "V3440311" AND numeroTYPEDONNEE = 1;


    TABLES

    STATISTIQUE
    numeroSTATISTIQUE
    numeroNUMEROSERIE
    numeroTYPEDONNEE

    ANNEE_STATISTIQUE
    numeroANNEE
    numeroSTATISTIQUE
    nombreANNEE_STATISTIQUE


    Merci à tous ceux qui prendront le temps de lire ce message

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Une tite dernière avant le lit

    Déjà il ne faut pas oublier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Annee_statistique.numero_stats = stats.num_stats ...
    Ensuite tu peux utiliser 2 fois la même table ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT A.numAnnee, AVG(B.nbAnnee_stats)
    FROM Annee_Stats A, Annee_Stats B, Stats
    WHERE A.numStats = Stats.NumStats
    AND B.numStats = Stats.NumStats
    AND B.NumAnnee >= anneeDebut -4
    AND B.NumAnnee <= anneeDebut
    AND Stats.num ...
    AND ...;
    Essaye

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 108
    Points
    108
    Par défaut :)
    Bien entendu j'avais oublier de faire ma jointure effectivement hehe

    Si j'ai bien compris... ma requete serait comme cela :

    SELECT A.numeroANNEE, AVG(B.nombreANNEE_STATISTIQUE) AS moyennee
    FROM ANNEE_STATISTIQUE AS A, ANNEE_STATISTIQUE AS B, STATISTIQUE
    WHERE A.numeroSTATISTIQUE=STATISTIQUE.numeroSTATISTIQUE And B.numeroSTATISTIQUE=STATISTIQUE.numeroSTATISTIQUE And B.numeroANNEE>=A.numeroANNEE-4 And B.numeroANNEE<=A.numeroANNEE And numeroTYPEDONNEE=1 And numeroNUMEROSERIE='V3440311';

    Le problème c'est que Access ne la digère pas, il affiche l'ereur suivante :
    Vous avez essayez d'exécuter une requête ne comprenant pas l'expression spécifié numeroANNEE comme une partie de la fonction d'agrégat.

    :

    Maryse

  4. #4
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    Normal, lorsque tu utilise une fonction d'agrégation (qui regroupe des données) telle que somme, average, etc ... tu dois avoir un GROUP BY dans ta requete. Ici, GROUP BY B.nombreANNEE_STATISTIQUE
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 108
    Points
    108
    Par défaut Même erreur toujours
    Même avec le group by l'erreur persiste toujours.

    Mais bon, j,ai dla difficulter à comprendre la requete....

    Disons que je fais souvent du sql, mais les select un peu plus compexe surtout avec plusieurs tables je m'y perd, j'ai besoin d'apprendre beaucoup sur ce côté-ci...

    Surtour que c'est mon métier

  6. #6
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    et si tu fais un GROUP BY numeroANNEE plutot ?
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 108
    Points
    108
    Par défaut Effectivement
    Oui effectivement c'est sur l'annee qu'on doit faire le regroupement c'est beaucoup plus logique, et la requete s'exécute...

    Mais... Les données sont fausses!



    Par exemple pour l'annee 1987 ca devrait etre la moyenne entre les 4 dernieres annee plus l'annee 1987, donc la moyenne de 1983, 1984,1985,1986,1987, mais il n'y a des données dans la base de donnée que pour 1987 qui est égale à 465975, mais la requete donne 81253... ??? Je ne sais pas ou elle va chercher ca.
    J'ai vérifier 1991 et la donnée est fausse aussi.

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 108
    Points
    108
    Par défaut Résolu!! :)
    Enfin! Ma requete fonctionne. Et c'est grace a vous qui avez pris le temps de m'aider je vous en rermerci ennormément .

    J'ai pris le temps de regarder ce que faisait la requete et compris mon erreur grossiere qui n'avait aucun lien. il me manquait une clause finalement.

    Voici la requete finale

    SELECT B.numeroANNEE, AVG(A.moyenneANNEE_STATISTIQUE) AS moyenne
    FROM ANNEE_STATISTIQUE AS A, ANNEE_STATISTIQUE AS B, STATISTIQUE
    WHERE A.numeroSTATISTIQUE=STATISTIQUE.numeroSTATISTIQUE And B.numeroSTATISTIQUE=STATISTIQUE.numeroSTATISTIQUE And A.numeroANNEE>=B.numeroANNEE-4 And A.numeroANNEE<=B.numeroANNEE And numeroTYPEDONNEE=1 And numeroNUMEROSERIE=numerodeserie And A.nombreMoisANNEE_STATISTIQUE=12 And B.nombreMoisANNEE_STATISTIQUE=12
    GROUP BY B.numeroANNEE;

    Ceci me facilite beaucoup la vie!!!
    Et m'a donner de l'expérience sql lol

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

Discussions similaires

  1. [Toutes versions] Déterminer le nombre de jours pour chaque année fiscale, entre deux dates données
    Par mikeactuaire dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/09/2011, 12h42
  2. Réponses: 1
    Dernier message: 09/03/2011, 10h39
  3. Cumul pour chaque année
    Par alimhassa dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/05/2010, 16h41
  4. Requête : récupérer la dernière note de chaque année
    Par maximeguyot dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/08/2009, 17h08
  5. [SQL] Sélectionner un mois pour chaque année
    Par kreatik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/06/2007, 14h35

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