2015-12-17 3 views
-3

Ik есть таблица AHTLETE_TABLE с именем пользователя, athlete_time и athlete_date Я хочу, чтобы вернуть лучшее время (MIN (athlete_time) каждого спортсмена Я использую этот запрос:MySQL GROUP BY - неправильные даты

$sql = " SELECT *, MIN(athlete_time) AS minimum 
FROM (".ATHLETE_TABLE.") 
WHERE athlete_time <> '00:00:00' 
GROUP BY athlete_username 
ORDER BY minimum ASC"; 

Я получаю лучшее время с неправильными датами. Я не знаю, что я должен сделать. Спасибо в любом случае за вашу помощь.

+0

'ATHELTE_TABLE' или' ATHLETE_TABLE'? –

+3

что вы имеете в виду неправильные даты? показать нам образец данных, текущий результат и выход желания. –

+0

Итак, есть несколько записей на одного спортсмена, и вы хотите быстро найти время и на какую дату он был достигнут? Я бы, вероятно, не группировал и просто заказывал 'athlete_time', а затем выполнял разницу по имени пользователя. – chris85

ответ

0

проблема в том, ваша группа по привезет произвольную дату.

Вам нужно вычислить значение min в производный запрос и соединение назад, чтобы получить всю строку.

SELECT AT.* 
FROM ATHLETE_TABLE AT 
JOIN (SELECT username, MIN(athlete_time) AS minimum 
     FROM ATHLETE_TABLE   
     GROUP BY username 
    ) T 
    ON AT.username = T.username 
AND AT.athlete_time = T.minimum 

ПРИМЕЧАНИЕ: будьте осторожны, что вы хотите делать, если же пользователь имеет связи для MIN(athlete_time), в этом случае будет показывать оба раза.

+0

Спасибо Хуан Карлос Оропеза :) Он отлично работает. –

+0

Sara помните, что принимайте ответ и повышайте, если это решит вашу проблему. –