Requete mysql un peu complexe !!

wcherif Messages postés 7 Date d'inscription samedi 28 août 2010 Statut Membre Dernière intervention 28 août 2010 - 5 sept. 2007 à 15:14
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Derniè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 !
A voir également:

13 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 sept. 2007 à 16:59
Salut,

Il te faut faire une requête imbriquées je pense :

Select ... FROM (SELECT Max(Value) FROM TaTable WHERE TaDate Between ... )
______________________________________
DarK Sidious
0
wcherif Messages postés 7 Date d'inscription samedi 28 août 2010 Statut Membre Dernière intervention 28 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 !!!
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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
0
wcherif Messages postés 7 Date d'inscription samedi 28 août 2010 Statut Membre Dernière intervention 28 août 2010
5 sept. 2007 à 22:09
Ce que t'as proposé me donne la moyenne des trois max d'une seule semaine, alors que je veux avoir la moyenne des trois max de chaque semaine !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
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

Dom
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
6 sept. 2007 à 11:54
oups à la place des "dw" mettre "wk" ...

Dom
0
wcherif Messages postés 7 Date d'inscription samedi 28 août 2010 Statut Membre Dernière intervention 28 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 ?
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
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

Dom
0
wcherif Messages postés 7 Date d'inscription samedi 28 août 2010 Statut Membre Dernière intervention 28 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' ;
0
wcherif Messages postés 7 Date d'inscription samedi 28 août 2010 Statut Membre Dernière intervention 28 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  )
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
7 sept. 2007 à 14:07
N'est-ce pas plutôt comme cela la syntaxe ?
"order by traffic desc limit 0,3"




Dom
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
7 sept. 2007 à 14:33
Excuses , je n'avais pas lu
" la version de mysql ne peut pas l'utilisé dans une sous requete !! "

Dom
0
Rejoignez-nous