Я предполагаю, что вам нужен только один результат для каждого игрока, даже если они набрали один и тот же максимальный результат более одного раза. Я также предполагаю, что вы хотите, чтобы каждый игрок впервые проявил себя лучше в случае, если есть повторы.
Есть несколько способов сделать это. Вот способ, специфичный для MySQL:
SELECT user, scoredate, score, notes FROM (
SELECT *, @prev <> user AS is_best, @prev := user
FROM table1, (SELECT @prev := -1) AS vars
ORDER BY user, score DESC, scoredate
) AS T1
WHERE is_best
Вот более общий способ использования обычного SQL:
SELECT T3.* FROM table1 AS T3
JOIN (
SELECT T1.user, T1.score, MIN(scoredate) AS scoredate
FROM table1 AS T1
JOIN (SELECT user, MAX(score) AS score FROM table1 GROUP BY user) AS T2
ON T1.user = T2.user AND T1.score = T2.score
GROUP BY T1.user
) AS T4
ON T3.user = T4.user AND T3.score = T4.score AND T3.scoredate = T4.scoredate
Результат:
1, '2010-01-01 17:00:00', 50, 'Much better'
2, '2010-01-01 14:00:00', 100, 'Perfect score'
Тестовые данные, которые я использовал, чтобы проверить это:
CREATE TABLE table1 (user INT NOT NULL, scoredate DATETIME NOT NULL, score INT NOT NULL, notes NVARCHAR(100) NOT NULL);
INSERT INTO table1 (user, scoredate, score, notes) VALUES
(1, '2010-01-01 12:00:00', 10, 'First attempt'),
(1, '2010-01-01 17:00:00', 50, 'Much better'),
(1, '2010-01-01 22:00:00', 30, 'Time for bed'),
(2, '2010-01-01 14:00:00', 100, 'Perfect score'),
(2, '2010-01-01 16:00:00', 100, 'This is too easy');