Problème SQL

Résolu/Fermé
grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009 - 21 nov. 2007 à 12:20
grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009 - 22 nov. 2007 à 10:14
Bonjour,

J'ai une table avec des enregistrements

user - date connexion - score
greg1 - 20071112 - 50
greg1 - 20071113 - 60
greg2 - 20071115 - 70
greg2 - 20071115 - 80

Je voudrais récupérer pour chaque user la ligne du meilleur score, comment faire?

j'ai essayé avec les distinct, mais ca ne fonctionne pas
j'ai essayé avec le having aussi mais sans succès.

Si quelqu'un a une piste ou la réponse, je suis preneur.

D'avance merci

13 réponses

ZOUARI Messages postés 60 Date d'inscription lundi 26 avril 2004 Statut Contributeur Dernière intervention 14 mai 2011 29
21 nov. 2007 à 12:45
Pour résoudre ce problème il faut utilisé la fonction Max donc on oura la requêtte SQL suivante:

SELECT user, Max(score) AS MeilleureScore
FROM table1
GROUP BY user;

1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2007 à 12:42
Bonjour,

Select max(score) From myTable Where User = 'myUser'

;o)

Polux
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2007 à 12:50
Oupsss très juste ZOUARI, moi je n'ai que le meilleur score d'un user ... j'avais pas bien tout lu ...

;o)

Polux
0
grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009 5
21 nov. 2007 à 13:33
Bonjour,

Merci de vos réponses mais dans ce cas, je n'ai pas la date a laquelle il a réaliser ce meilleur score !!
et si je rajoute

select user, date_connexion, Max(score)
from table1
group by user, date_connexion


ben la j'ai mon tableau entier qui ressort !

D'autres idées?
0

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

Posez votre question
OriOnz750 Messages postés 15 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 22 novembre 2007 11
21 nov. 2007 à 16:48
Plop, essaye ça :

Select user, date_connexion, max(score) as MeilleurScore
from table1
group by user
0
grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009 5
21 nov. 2007 à 17:35
Merci orionz pour ta réponse,

cependant ca me génère une erreur disant que date_connexion n'est pas valable car il n'est pas dans une fonction d'agrégation ou dans une clause group by.
Et quand je le met dans le group by, j'ai toute les lignes qui ressortent.

je me demande si c'est possible!

si niais : grecoriz
0
OriOnz750 Messages postés 15 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 22 novembre 2007 11
21 nov. 2007 à 19:59
plop, j'ai vérifié, voila ce que j'obtiens :

création de la table, avec tes enregistrements :

CREATE TABLE `table1` (
`user` VARCHAR( 20 ) NOT NULL ,
`date_connexion` VARCHAR( 20 ) NOT NULL ,
`score` INT NOT NULL
);

INSERT INTO `table1` ( `user` , `date_connexion` , `score` )
VALUES ('greg1', '20071112', '50'),
('greg1', '20071113', '60'),
('greg2', '20071115', '70'),
('greg2', '20071115', '80');

requete pour récuperer le meilleur score pour chaque user :

SELECT user, date_connexion, max( score ) AS MeilleurScore
FROM table1
GROUP BY user
LIMIT 0 , 30

résultats de la requete :


user - date_connexion - MeilleurScore
greg1 20071112 60
greg2 20071115 80

ca marche donc chez moi, tu peux me dire ce que tu obtiens avec la meme démarche ?
0
salut orionz750
je sais pas ou te contacter c est pour ca que je fais ca par le biais de ce site ou j ai pour habitude de venir observer tes réponses que je toruvent si pertientes et ta générosité envers les autres.
aprés des années passées en cachette je te le déclare en fin: JE T AIME. je ne voulais pas paraitre ridicule et n osais te poser de questions de peur de paraitre sote mais aujourd hui je passe enfin a l act.je ne suis pas geekette c est pour ca que j ai commencé a fréquenter ce site mais j e t ai déocuvert et dessuite est tombée sous le charme. accepterais tu de me rencontre si par chance tu habites a bordeaux je dirai a tout hasar allées des chartres ce jeudi a 12H?? j en serais vraiment toute émoustillée. merci d avance pour ta réponse tant attendue
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50 > lea star
21 nov. 2007 à 21:45
et on pourra te reconnaitre comment ??? ;p
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 21:44
trop top ... c'est la premiere fois que je vois ça ...

Le premier mariage sur CCM en vue ???
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2007 à 21:15
Bloc note : * Penser à demande un forum Agence Matrimoniale ...

Bravo Léa, belle déclaration ... ça règle pas le problème de grecoriz, mais c'est beau ... bonne chance à toi

;o)

Polux
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2007 à 21:51
Va y avoir du monde demain à midi sur les allées de chartres à Bordeaux ....

;o)
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 21:56
xpdrrrrr
0
lea star > ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009
21 nov. 2007 à 22:09
Bonjour,
merci de votre soutien ce n est pas facil pour moi de me déclarer. et aussi merci de me faire penser a une petite description pour se reconaitre. je porterai un bonnet blanc et une echarpe noir rien de bien spéciale mais ca sufira. je suis assez petite cheuveux mi longs. je suis dsl de "squatter" votre forum pour des questions autre qu informatique mais c est tres important pour moi. et oui, prq pas un forum 'rencontres' ca serait bien util^^ et PS: orionz750 je modifie le lieu de rdv. je t attendrai allées de tourny leiu plus connu et plus facile pr toi a repérer. a demain j espere vraiment te voir
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50 > lea star
21 nov. 2007 à 22:16
cheuveux mi longs

Brune, Blonde, Rousse ???
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2007 à 22:11
Hé les gars, c'est pas allées de chartres ... c'est allées de tourny maintenant, même heure ... bonnet blanc et écharpe noire ... c'est noté ...
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 22:20
et pour ceux qui savent pas ou cela se trouve, c'est ici

;p
0
chatain mais détrompez vous je saurai reconnaitre orionz750 parmi tant d autres. je ne te connais pas ms j ai l impression d etre si proche de toi que je pourrai te reconaitre sans mm t avoir vu. imposteurs abstenez vous!!
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 22:21
zut ... je voulais venir avec mon arrosoir

;p
0
OriOnz750 Messages postés 15 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 22 novembre 2007 11
21 nov. 2007 à 22:24
noulish xD

avant de commencer dsl grecoriz de pourrir ton post mais il le faut (préviens moi quand meme si la requete marche) :p
arf ca l'aurait fait si ca aurait été vrai et qu'on se soit rencontré comme ca mais ca existe que dans les films tout ca ^^
désolé pour tous ceux qui y ont cru mais je la connais...c'est ma copine depuis 5ans en fait -_-' mais bon jtrouve ca classe ta ptite attention chou
pas de pb ma puce on mange ensemble demain comme d'hab, d'ailleurs si des gens veulent se joindre à nous (bah ouais, tu fais ta trollette (jtexpliquerai ce que c'est), t'assumes), ca sera bien à midi allées de tourny et elle à pas menti en se décrivant, par contre oubliez le bonnet blanc (pas moyen que tu le mettes demain). et les filles de CCM, hésitez pas a prendre exemple :p

bonne soirée
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
21 nov. 2007 à 22:28
pas de prob ... j'y serais ;p
0
lea star > ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009
21 nov. 2007 à 22:36
ok le rdv est prit alors disons devant l enseigne de thomas cook voyages. ue non pas de bonnet mais une petite ac un skateur c est nous:) a demain
0
grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009 5
22 nov. 2007 à 09:21
Bonjour,

Non pas de problème pour ces petites attentions, c'est plutôt bien.

Sinon, lorsque je fais cette requête

SELECT user, date_connexion, max( score ) AS MeilleurScore
FROM table1
GROUP BY user


J'ai ce message d'erreur

La colonne 'table1.date_connexion' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.

Et lorsque je rajoute le group by, je lance donc cette requête (j'ai mis user

SELECT user, date_connexion, max( score ) AS MeilleurScore
FROM table1
GROUP BY user, date_connexion


et j'obtiens comme résultat :


greg1 20071112 50
greg1 20071113 60
greg2 20071115 80

ca marche quand la date est la meme mais pas pour greg1 ou on a deux dates différentes.

Je précise quand même que je suis sous sql server 2000.

Merci merci et "bon appétit"
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50 > grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009
22 nov. 2007 à 09:32
Bonjour,

As tu essayé ceci :

SELECT user, date_connexion, max( score ) AS MeilleurScore
FROM table1
GROUP BY user, date_connexion
HAVING max( score )
ORDER BY user
0
grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009 5 > ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009
22 nov. 2007 à 10:14
Merci Shaboo, mais malheureusement, il n'a pas l'air d'aimé le having max(score) sans rien derrière.

A Bientôt

^_^
grecoriz
0
grecoriz Messages postés 49 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 5 avril 2009 5
22 nov. 2007 à 09:43
wazaaaaa

J'ai trouvé !!
Il y a peut être plus élégant mais pour l'instant ca marche,

voila la requete que j'ai lancé :

SELECT t1.user, t1.date_connexion, t1.score
FROM table1 t1, (select t1bis.user, max(t1bis.score) as MeilleurScore from table1 t1bis GROUP BY t1bis.user) t2
where t1.user = t2.user
and t2.meilleurscore = t1.score


et le résultat tant attendu

greg2 20071116 90
greg1 20071113 60



PS : j'avais rajouté un enregistrement et j'avais ces données en base :
greg1 20071112 50
greg1 20071113 60
greg2 20071115 70
greg2 20071115 80
greg2 20071116 90


Merci en tout cas, il ne me reste plus qu'a transcrire à mon cas qui est légèrement plus complexe.

A bientot et tous mes voeux de bonheur à orionz et lea star !!! et encore et toujours bon appétit( c'est important)
0