SQL: выбрать максимальное значение из столбца вместе с соответствующей датой
Кто-нибудь знает, как я могу получить дату, которая соответствует максимальному количеству очков за game_id, за уровень, пожалуйста:
----------------------------------------
|id |game_id |level |score |date |
----------------------------------------
|1 |0 |1 |90 |1391989720 |
|1 |0 |1 |95 |1391989721 |
|1 |1 |1 |4 |1391989722 |
|1 |1 |1 |8 |1391989723 |
|1 |1 |2 |6 |1391989724 |
----------------------------------------
Спасибо, ребята, должны были проверить соответствующие комментарии. Этот запрос работает:
SELECT cdu_user_progress.game_id,
cdu_user_progress.level,
max_score,
cdu_user_progress.date
FROM
(
SELECT game_id, level, MAX(score) AS max_score
FROM cdu_user_progress
GROUP BY game_id, level
) AS ms
JOIN cdu_user_progress ON cdu_user_progress.game_id = ms.game_id AND
cdu_user_progress.level = ms.level AND
cdu_user_progress.score = ms.max_score
А что если я также хочу получить счет для ПЕРВОГО game_id (за уровень) и его дату, чтобы получить этот вывод:
-----------------------------------------------------------------
|game_id |level |max_score |max_date |first_score |first_date |
-----------------------------------------------------------------
|0 |1 |95 |1391989721 |90 |1391989720 |
|1 |1 |8 |1391989723 |4 |1391989722 |
|1 |2 |6 |1391989724 |6 |1391989724 |
-----------------------------------------------------------------
Спасибо!
1 ответ
Поскольку это mysql, вы можете просто сделать это, чтобы получить всю строку с наибольшим количеством очков за игру:
select * from (
select *
from cdu_user_progress
order by score desc) x
group by game_id
Это работает из-за нестандартной групповой функциональности mysql, в результате чего возвращается первая строка, встреченная для каждой группы, когда не все неагрегированные столбцы названы в предложении group by.