Maison > Questions et réponses > le corps du texte
Je souhaite sélectionner le meilleur score pour chaque utilisateur pour un jeu spécifique.
Ma requête actuelle sélectionne le score, la date_saved et le nom d'utilisateur du résultat pour skills_game avec l'identifiant 1.
SELECT MAX(score) as score, date_saved, users.username FROM results INNER JOIN users_results ON results.id = users_results.result_id INNER JOIN users ON users_results.user_id = users.id WHERE skill_game_id = 1 GROUP BY user_id ORDER BY score DESC
Les résultats sont les suivants :
| score | username | date_saved | --------------------------------- | 73 | Mark | 2021-09-06 | | 51 | John | 2018-08-16 | | 46 | Ryan | 2020-02-20 | | 43 | Chris | 2019-08-27 | | 40 | Steven | 2020-07-04 |
Actuellement, date_saved n'est pas toujours correct, car le résultat de 73 points de Mark a en fait été enregistré le 03/11/2021. Voici les résultats de Mark :
| score | username | date_saved | --------------------------------- | 73 | Mark | 2021-11-03 | | 35 | Mark | 2021-10-29 | | 24 | Mark | 2021-09-06 |
L'instruction GROUP BY sélectionne la première ligne du groupe et MAX(score) sélectionne le score le plus élevé du groupe. Je veux pouvoir sélectionner le score le plus élevé et sélectionner la date correspondante, mais je ne sais pas comment y parvenir dans MySQL.
P粉9646829042024-04-06 00:37:46
Vous pouvez également le faire en sélectionnant la plus grande date_saved
SELECT MAX(score) as score, MAX(date_saved), users.username FROM results INNER JOIN users_results ON results.id = users_results.result_id INNER JOIN users ON users_results.user_id = users.id WHERE skill_game_id = 1 GROUP BY user_id ORDER BY score DESC