2010-06-12 4 views
1

J'ai essayé de résoudre ce problème pendant 2 heures maintenant mais je ne peux pas comprendre les solutions d'autres ont donné aux gens avec un problème similaire. J'ai vu quelques réponses mais je ne peux pas l'appliquer à mes propres besoins. J'ai un tableau des utilisateurs et de leur temps dans différents événements sportifs. Je dois faire un scoretable qui montre l'utilisateur avec le meilleur temps, deuxième meilleur etc. Le tableau avant le tri et la récupération se présente comme suit:Problème MySQL: Comment obtenir les lignes souhaitées

 
|  Name  |  Time  |  Date  | 
'''''''''''''''''''''''''''''''''''''''''''''' 
| Jack  | 03:07:13 | 2010-12-01 | 
| Peter  | 05:03:12 | 2010-12-03 | 
| Jack  | 03:53:19 | 2010-12-04 | 
| Simon  | 03:22:59 | 2010-12-02 | 
| Simon  | 04:01:11 | 2010-12-09 | 
| Peter  | 03:19:17 | 2010-12-06 | 
'''''''''''''''''''''''''''''''''''''''''''''' 

|  Name | Time | Date  | 
'''''''''''''''''''''''''''''''''''''''''' 
| Jack  | 03:07:13 | 2010-12-01 | 
| Peter | 03:19:17 | 2010-12-06 | 
| Simon  | 03:22:59 | 2010-12-02 | 
'''''''''''''''''''''''''''''''''''''''''' 

Je sais que des réponses à ce problème réside dans une autre question posée sur ce même site: CLICK HERE

Je n'ai juste aucune idée de comment l'appliquer pour répondre à mes besoins.

L'aide est fortement appréciée. Thank you

-Joonas

+2

Il s'agit d'une base de données fondamentale assez mauvaise pour commencer. Vos utilisateurs devraient vraiment être dans un tableau séparé de leur temps. – fearofawhackplanet

+0

@fearofawhackplanet: Vous avez raison, mais peut-être que le premier est une vue. –

Répondre

1

Replace nom_de_table le nom de la table:

SELECT DISTINCT `name`, `time`, `date` 
FROM `table_name` 
INNER JOIN 
(
    SELECT `name`, MIN(`time`) as MinTime 
    FROM `table_name` 
    GROUP BY `name` 
) 
groupedtime ON `table_name`.`name` = groupedtime.`name` AND `table_name`.`time` = groupedtime.MinTime 
ORDER BY `time` 
+1

Vous pouvez ajouter 'ORDER BY time' pour ordonner les résultats par temps, comme dans l'exemple. –

+0

@True Soft: Bon appel. Exemple édité. :) – Shaun

+0

@True Soft: pourrait aussi être compatible avec les back-ticks (') – Sev

-1
select name, min(time) 
from mytable 
group by name 
order by time desc 
+0

La date n'est pas affichée –

+0

Le but est d'obtenir le meilleur temps pour chaque personne. Cela vous donne une liste triée de tous les temps pour tous les gens et place simplement leur temps en groupe. – Shaun

+0

Shaun - vous êtes incorrect. Cela donne une liste triée du meilleur temps au pire, avec le meilleur temps (le plus court) de chaque personne. – Randy

0

Nom SELECT, min (temps) comme BestTime
FROM test
GROUP BY Nom
COMMANDER PAR BestTime

Laissez-moi savoir si ça ne marche pas!

Questions connexes