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

Requêtes MySQL Discussion :

Select moyenne d'une table en fonction du jour


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut Select moyenne d'une table en fonction du jour
    Bonjour, j'ai la table suivante


    Voila comme c'est visible, ma table contient une colonne date qui m'affiche la date des tests effectués...normalement ma table doit se remplir automatiquement et dans chaque jours j'ai des nouvelles valeurs..
    Ce que je dois faire c'est obtenir par la suite la moyenne de chaque jour et la stocker dans une autre table afin de tracer une courbe en fontion de cette moyenne..je n'ai pas trouver comment faire pour prendre la moyenne de chaque jour

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Il est déconseillé de nommer une colonne avec un mot clé réservé (ici, le mot date).
    Pour ce qui est de calculer une moyenne, c'est la fonction AVG qui permet de l'obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT `date`, AVG(ftp)
    FROM la_table
    GROUP BY `date`
    ced

  3. #3
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Ah d'accord, je vais recéer ma table alors
    Sinon pour mieux te mettre dans le cadre de mon application , enfet je travaille sur une application qui fait des tests périodiques en temps réel ( chaque 20 min une nouvelle valeur s'ajoute a ma table)
    donc pour le moment j'affiche un graphe pour un jour donnée ( ftp = f(heure)) et ca marche
    je veux par la suite afficher une courbe en fonction des jours

    pour chaque jour une moyenne des tests effectués......
    cette requete reste valable?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Oui, cette requête donne la valeur moyenne par jour.

    ced

  5. #5
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    D'accord : )

    je vais essayer ca maintenant et te mettre au courant

  6. #6
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    ca marche nickel merci beaucoup

    Pour le faire maintenant en fonction du mois,est ce que j'utilise la commande left et right pour afficher la moyenne de chaque mois ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select date ,avg(ftp) from ftptable group by (left(right(date,5),2);
    n'a pas marché
    mais celle ci marche je ne sait pas si elle est juste ou non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select date ,avg(ftp) from ftptable group by (left(date,7));
    car que je l'ai testé sur un exemple le résultat n'est pas juste

  7. #7
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    bonjour,

    tu peux utiliser la fonction EXTRACT() afin d'extraire le jour, le mois etc d'une date

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Si le champ date est bien de type date, alors tu as la fonction MONTH() pour extraire le mois.
    Voici le lien vers la doc MySQL pour les fonctions de dates : http://dev.mysql.com/doc/refman/5.0/...functions.html

    ced

  9. #9
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    oui il est bien de type date , j'ai essayé extract ca n'a pas marché , je vais essayé d'utiliser month()

  10. #10
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    j'ai testé cette commande, normalement elle est juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select month(date),avg(ftp) from ftptable group by (month(date)
    sauf qu'en calculant le résultat à la main, je trouve un autre résultat

  11. #11
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Si le calcul doit se faire avec des données sur plusieurs années, alors un même mois peut réapparaître plusieurs fois. Il faut donc coupler MONTH et YEAR...
    Sinon, peut-on avoir un jeu de données pour voir ce qui ne fonctionnerait pas ?

    ced

  12. #12
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    pour le moment elle ne contient que des données de ces deux mois


    deja pour afficher les jours du mois courant j'i du faire ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where (month(date)=month(now())) group by date;

  13. #13
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    ca a marché pour jour, mais pas pour month et year
    ca me genere cette erreur pour le mois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.SQLException: Cannot convert value '4' from column 1 to TIMESTAMP.
    et pour l'année
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.IllegalArgumentException: The 'year' argument must be in range 1900 to 9999.

  14. #14
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Est-ce qu'on peut voir le script de création de la table, affichable avec la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE la_table
    ?
    Autre question : peut-on avoir le jeu de données sous forme d'INSERT ? Parce que là, c'est fastidieux pour recopier l'image.
    Au passage, il faut mettre le mot date, dans les requêtes, entre ` (Alt Gr + 7), parce que "date" est un mot-clé réservé (il est d'ailleurs déconseillé de nommer un champ comme ça).
    Si ce champ est bien de type "date", alors la requête suivante fonctionne (j'ai testé et le résultat obtenu est cohérent avec un court je de données) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MONTH(`date`), AVG(ftp)
    FROM la_table
    GROUP BY MONTH(`date`)
    Encore une autre piste : tu as des dates à NULL, donc les valeurs de ftp sur ces dates ne sont pas prises en compte dans le regroupement par mois...

    ced

  15. #15
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    | Table    | Create Table                                                                                                                                         |
    +----------+------------------------------------------------------------------------------------------------------------------------------------------------------+
    | ftptable | CREATE TABLE `ftptable` (
      `date` date default NULL,
      `heure` time default NULL,
      `ftp` float default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 | 
    +----------+------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    les insert se font avec une fonction et une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into ftptable values(now(),now(),debitftp());
    avec debitftp est une fonction java

  16. #16
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    OK. Donc, le champ "date" est bien de type date.
    Du coup, la requête que j'ai proposée devrait fonctionner. Qu'est-ce qui ne passe pas ?

    ced

  17. #17
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    lorsque mon champ est de type date , pour recuperer sa valeur en java je dois faire getdate() normalement c'est ca ?
    car month(date) retourne une valeur de type int que je peux pas utiliser par la suite, j'ai besoin d'avoir le retour de type date ><

  18. #18
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Le problème avec les NULL, c'est qu'on ne peut pas deviner à quelle date les rattacher.
    Sinon, le type DATE correspond à un jour, un mois et une année... Du coup, difficile (voire impossible) de renvoyer un mois de type DATE, sauf éventuellement à le faire sous la forme 2011-03-01, ce qui revient à fixer arbitrairement le jour (au 1er du mois). C'est ce que tu souhaites ?

  19. #19
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    normalement je n'aurai plus de null dans ma table ..d'ailleurs je vais les supprimer..
    je dois afficher les moyennes pour chaque mois et chaque année....
    si c'est obligatoire de fixer un jour...bein il n'ya pas d'autre solution ><

  20. #20
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Citation Envoyé par marouene_ Voir le message
    month(date) retourne une valeur de type int que je peux pas utiliser par la suite, j'ai besoin d'avoir le retour de type date
    Nouvelle question pour bien cerner le problème. En quoi le type int renvoyé par MONTH est gênant ? Pour l'affichage ?

    ced

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/08/2007, 17h53
  2. [MySQL] Aide select à partir d'une table
    Par carlosdz dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 28/06/2006, 22h47
  3. selection multiple vers une table ajout
    Par EE dans le forum Access
    Réponses: 12
    Dernier message: 18/05/2005, 16h56
  4. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42
  5. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22

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