Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 02/04/2011, 17h33   #1
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
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
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/04/2011, 22h52   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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 :
1
2
3
SELECT `date`, AVG(ftp)
FROM la_table
GROUP BY `date`
ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/04/2011, 13h06   #3
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
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?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/04/2011, 13h37   #4
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Oui, cette requête donne la valeur moyenne par jour.

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/04/2011, 15h42   #5
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
D'accord : )

je vais essayer ca maintenant et te mettre au courant
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 12h46   #6
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
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 :
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 :
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
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 23h13   #7
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
bonjour,

tu peux utiliser la fonction EXTRACT() afin d'extraire le jour, le mois etc d'une date
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/04/2011, 10h19   #8
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/04/2011, 10h52   #9
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
oui il est bien de type date , j'ai essayé extract ca n'a pas marché , je vais essayé d'utiliser month()
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/04/2011, 11h00   #10
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
j'ai testé cette commande, normalement elle est juste
Code :
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
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/04/2011, 18h10   #11
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/04/2011, 12h58   #12
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
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 :
WHERE (month(date)=month(now())) GROUP BY date;
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/04/2011, 13h07   #13
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
ca a marché pour jour, mais pas pour month et year
ca me genere cette erreur pour le mois:

Code :
java.sql.SQLException: Cannot convert value '4' FROM COLUMN 1 TO TIMESTAMP.
et pour l'année
Code :
java.lang.IllegalArgumentException: The 'year' argument must be IN range 1900 TO 9999.
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/04/2011, 20h30   #14
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Est-ce qu'on peut voir le script de création de la table, affichable avec la commande suivante :
Code :
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 :
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
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/04/2011, 12h29   #15
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Voila
Code :
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 :
INSERT INTO ftptable VALUES(now(),now(),debitftp());
avec debitftp est une fonction java
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/04/2011, 13h48   #16
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h47   #17
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
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 ><
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/04/2011, 23h02   #18
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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 ?
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 00h25   #19
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
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 ><
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/04/2011, 17h24   #20
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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édacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h33.


 
 
 
 
Partenaires

Hébergement Web