Bonjour tlm.
En fait je fait un group by dans une requete et je voudrait récupéré pour un champ récupérer la derniere valeur.
par example si count(*) = 5, je veu récupéré la 5eme valeur pour le champ.
en vous remerciant d'avance.
Bonjour tlm.
En fait je fait un group by dans une requete et je voudrait récupéré pour un champ récupérer la derniere valeur.
par example si count(*) = 5, je veu récupéré la 5eme valeur pour le champ.
en vous remerciant d'avance.
C'est quoi, la 5ième valeur ? Le MIN, le MAX ?
Je suis désolé, cest vrai que j'ai pas été tres précis.
c est une table d'action qui au depart est journaliere , mais je souhaite obtenir des donné hebdomadaire
Ma table est déclaré comme ceci :
pour récupéré en hebdomadaire, il me faut la valeur de la fermeture du dernier jour du group by.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE `journee` ( `id` int(10) unsigned NOT NULL auto_increment, `id_action` mediumint(8) unsigned NOT NULL default '0', `date` date NOT NULL default '0000-00-00', `ouverture` double unsigned NOT NULL default '0', `plushaut` double unsigned NOT NULL default '0', `plusbas` double unsigned NOT NULL default '0', `fermeture` double unsigned NOT NULL default '0', `volume` int(11) NOT NULL default '0', PRIMARY KEY (`id_action`,`date`), KEY `id_2` (`id`) ) TYPE=MyISAM
actuellement, ma requete est :
donc je récupère la fermetue du premier jour ( enfin je croit ) faudrait je vérifie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT id_action,date,ouverture,MAX(plushaut) as plushaut,MIN(plusbas) as plusbas,fermeture, SUM(volume) as volume FROM journee GROUP BY id_action,YEAR(date),WEEK( date ) ORDER BY DATE DESC
Pas une bonne idée de donner comme nom de colonne un mot clé du langage !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT id_action, YEAR(Date), WEEK(Date), b.fermeture, SUM(volume) as volume FROM journee a INNER JOIN journee b ON a.id_ACtion = b.Id_Action AND YEAR(a.Date) = YEAR(b.Date) AND WEEK(a.Date) = YEAR(b.Date) WHERE b.Date = (SELECT MAX(Date) FROM journee c WHERE a.id_action = c.id_action AND YEAR(a.Date) = YEAR(c.Date) AND WEEK(a.Date) = YEAR(b.Date)) GROUP BY a.id_action, YEAR(a.date), WEEK(a.date) ORDER BY YEAR(a.date), WEEK(a.date) DESC
j ai renommé ma colonne date en date2 ( pour les tests ) ... mais la requette ne marche pas ... ca passe les sous -requete avec MySQL 4 ? j'ai simplifié la sous-requete.Quand je met une chaine de caractère ( par example '12-15-2004'), la requete fonctionne ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Erreur requête SQL : SELECT a.id_action, YEAR( a.date2 ) , WEEK( a.date2 ) , b.fermeture, SUM( a.volume ) AS volume FROM journee a INNER JOIN journee b ON a.id_ACtion = b.Id_Action AND YEAR( a.date2 ) = YEAR( b.date2 ) AND WEEK( a.date2 ) = WEEK( b.date2 ) WHERE b.date2 = ( SELECT date2 AS truc FROM journee LIMIT 1 ) GROUP BY a.id_action, YEAR( a.date2 ) , WEEK( a.date2 ) ORDER BY YEAR( a.date2 ) , WEEK( a.date2 ) DESC LIMIT 0 , 30 MySQL a répondu: #1064 - Erreur de syntaxe près de 'SELECT date2 AS truc FROM journee LIMIT 1 ) GROUP BY a.id_act' à la ligne 5
D'où l'intérêt de respecter les règles de ce forum : Nom et version du SGBDR...Envoyé par Stef784ever
Les sous requêtes fonctionnent à partir de la 4.1.
si c'est du 4.0 faut obligatoirement passer par une table temporaire
pour récupérer par semaine la date maximale
Pour chacune des dates maximales, récupérer les autres infos dans la table principale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Create table JJ as SELECT YEAR( a.date2 ) AN, WEEK( a.date2 ) SEMAINE, MAX(a.date2) date2 FROM journee a GROUP BY YEAR( a.date2 ) , WEEK( a.date2 )
avec 1 index sur a.date2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select JJ.AN, JJ.SEMAINE, a.* FROM journee a, JJ where JJ.date2 = a.date2 order by 1,2
ça marche si il n'y qu'un seul et unique enreg pour une date date2 donnée
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager