Page 1 sur 1
requete SQL avec Max()
Posté : 18 juil. 2007, 21:05
par toojee
Bonjour,
j'ai un soucis avec une requete sql qui ne fait pas ce que j'aimerai faire...
Voici un exemple de la table
id | user_id | score | date
1----- 1------- 50 ----2007-07-17
1 ---- 1 ------ 80 ----2007-07-18
1-----2-------50 ------2007-07-17
J'aimerai recupérer le plus haut score de chaque user_id avec leurs date respective sans doublon.
Voici ma requete simplifier avec les éléments en questions
SELECT MAX( score ), date FROM la_table GROUP by user_id ORDER by score ASC
la ca me récupère pour l'user_id=1
- score=80
- date=2007-07-17
le problème est que la date ne correspond pas a la ligne du score 80, mais forcément car ca prend la premier user_id et ca cherche son score maximum....
Avez vous une solution pour éviter les doublons et récupérer les bonnes infos?
merci
Posté : 18 juil. 2007, 21:42
par Hubert Roksor
C'est simple, il suffit de
Posté : 18 juil. 2007, 23:32
par toojee
ah y a du avoir un problème dans le post!
Posté : 19 juil. 2007, 02:00
par Ryle
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".
Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.
Dans ta requête tu essayes de regrouper les résultats selon le champ user_id (dans ton group by), mais celui-ci n'apparait pas dans la liste des éléments à récupérer.
A l'inverse tu récupères le champ date, mais tu ne spécifies pas qu'il doit être groupé...
Un autre sgbd te retournerait une erreur.. mysql te retourne un résultat, mais qui n'a vraissemblablement pas grand sens...

Posté : 19 juil. 2007, 09:34
par Invité
ah oui désolé pour le mauvais emplacement, je voulais indiquer un problème php puis au dernier moment j'ai préférer celui-la.
En effet, dans ma requete initiale je recupere le user_id.
SELECT MAX( score ), date, user_id FROM la_table GROUP by user_id ORDER by score ASC
J'ai essayé ça :
SELECT MAX( score ), date, user_id FROM la_table GROUP by user_id, date ORDER by score ASC
mais du coup j'ai 2occurences avec user_id=1
Posté : 19 juil. 2007, 09:48
par Genova
Bonjour,
normalement cette requête devrait marcher (necessite MySQL 4.1 ou 5 au minimum cependant) :
Code : Tout sélectionner
SELECT t1.*
FROM ma_table t1
WHERE t1.score = (
SELECT MAX(score)
FROM ma_table t2
WHERE t1.user_id = t2.user_id
)
Posté : 19 juil. 2007, 10:21
par toojee
merci beaucoup ca marche parfaitement!
J'avais pensé a faire une requete imbriqué mais pas comme ça!
Posté : 19 juil. 2007, 10:23
par Genova
Aucun problème, j'avais buté un bon moment sur le même problème que toi ...
ah les joies du SQL

Posté : 19 juil. 2007, 10:43
par zeus
J'espère au moins que
toojee à compris la requête

Tu aurais pu mettre un minimum d'explications

Posté : 19 juil. 2007, 10:46
par zeus
Modération :
toojee, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton
en haut à gauche de ce sujet.
Posté : 19 juil. 2007, 10:49
par toojee
oui oui j'ai compris la requete, j'été obligé car j'ai du réadapté a ma requete plus complexe.
Je met résolu donc! merci!
Posté : 19 juil. 2007, 10:55
par Genova
Je viens de me rendre compte que le GROUP BY user_id était inutile en fait, donc tu peux le supprimer.