wcherif
Messages postés7Date d'inscriptionsamedi 28 août 2010StatutMembreDernière intervention28 août 2010
-
5 sept. 2007 à 15:14
dominique.stock
Messages postés436Date d'inscriptionvendredi 7 novembre 2003StatutMembreDernière intervention 8 octobre 2008
-
7 sept. 2007 à 14:33
Bonjour, y a t il quelqu'un qui peux m'aider !!???
J'ai une table MySql qui contient des valeur prise à chaque jour (colonne date, et colonne valeur).
Je veux une requete qui me permet de :
faire la moyenne des troix max d'une valeur pour chaque semaine.
c'est un peu urgent !!
Merci d'avance !
wcherif
Messages postés7Date d'inscriptionsamedi 28 août 2010StatutMembreDernière intervention28 août 2010 5 sept. 2007 à 21:25
C'est sûrqu'il y aura des requetes imbriquées, mais la question c'est quelles sont les requetes et comment les imbriqués pour avoir un tel résultat !!!
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 5 sept. 2007 à 21:47
Salut,
Ben comme je te l'ai dit : SELECT ... FROM (SELECT ... FROM)
Il te faut une première requête qui va te sélectionne les trois premières lignes de la table en question, triée par ordre décroissant avec une date comprise entre le premier jour de la semaine et le dernier, et à partir de cette requête, calculer la moyenne des valeurs voulues.
______________________________________
DarK Sidious
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 6 sept. 2007 à 07:05
Salut,
Pour récupèrer pour chaque semaine je crois que tu n'a guère le choix : tu devra faire une boucle sur chaque semaine que tu veux afin d'exécuter la requête, à moins que tu sache faire une requêtes qui te renvoie les dates de chaque semaine...
______________________________________
DarK Sidious
dominique.stock
Messages postés436Date d'inscriptionvendredi 7 novembre 2003StatutMembreDernière intervention 8 octobre 20087 6 sept. 2007 à 11:52
Bonjour,
Voici une requête qui donne ce que tu souhaites mais sous MS SQL ...
A adapter (surtout le "top 3" je ne sais pas si cela existe sous mysql :
select avg(id),semaine from (
select id,datepart(dw,h.TEMPS) as semaine from
histo_varchar h where id in ( select top 3 id from histo_varchar where datepart(dw,TEMPS)=datepart(dw,h.TEMPS) order by id desc)
) t group by semaine
Histo_varchar : ta table
id : tes valeurs
temps: ta date
wcherif
Messages postés7Date d'inscriptionsamedi 28 août 2010StatutMembreDernière intervention28 août 2010 7 sept. 2007 à 00:38
Merci, est-ce que tu peux m'expliqué chaque partie de ta requete pour que je puisse la traduire en MySql;
pour la fct datepart(wk, date) : en MySql il ya la fonction YearWeek qui donne le numéro de la semaine à partir d'une date donnée en argument ;
pour la fontion TOP, il ya la fonction LIMIT en MySql , normalemnt c'est la meme chose;
et c'est quoi la variable "h " ??
et je crois que cette requete ne permet d'avoir que les resultats d'une seule semaine !! non ?
dominique.stock
Messages postés436Date d'inscriptionvendredi 7 novembre 2003StatutMembreDernière intervention 8 octobre 20087 7 sept. 2007 à 10:30
select avg(id),semaine from (
select id,datepart(dw,h.TEMPS) as semaine from
histo_varchar h where id in ( select top 3 id from histo_varchar where datepart(dw,TEMPS)=datepart(dw,h.TEMPS) order by id desc)
) t group by semaine
En faites h permet juste de renommer la table histo_varchar afin que SQL (et l'utilisateur ) ne se mélange pas les pinceaux entre les requêtes imbriquées ...
La bleue permet de sélectionner les 3 valeurs plus élevées d'une semaine
La rouge permet de les récupérer pour toutes les semaines de ta table
La verte fait la moyenne par semaine
wcherif
Messages postés7Date d'inscriptionsamedi 28 août 2010StatutMembreDernière intervention28 août 2010 7 sept. 2007 à 12:06
j'ai traduit vos requete (celles en rouge et en bleue) en MySql :
select traffic,yearweek(date,1) as semaine from maTable T where (date,ci,traffic) in
(select date,ci, traffic from maTable where yearweek(date,1)=semaine order by traffic desc )
et voila le résultat :
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C'est à cause de la fct 'Limit', la version de mysql ne peut pas l'utilisé dans une sous requete !!
A part àa, votre requete à l'air de résoudre mon pb ! Merci beaucoup;
Reste maintenant à trouver un autre équivalent à 'limit' ;
wcherif
Messages postés7Date d'inscriptionsamedi 28 août 2010StatutMembreDernière intervention28 août 2010 7 sept. 2007 à 12:12
Désolé, j'ai mal copier la requete il manque la fontion clef "limit" :
select traffic,yearweek(date,1) as semaine from maTable T where (date,ci,traffic) in
(select date, traffic from maTable where yearweek(date,1)=semaine order by traffic desc limit 3 )