There is a much simpler solution using order by
to get the best latest score :
select game_id, level, score, date
from cdu_user_progress
where id = 1
order by score desc, date desc
limit 1
To get all the best scores and their latest time you need a join.
select a.game_id, a.level, a.score, max(p.date)
from (select game_id, level, max(score) as score
from cdu_user_progress
group by game_id, level) as a
inner join cdu_user_progress p
on a.game_id = p.game_id, a.level = p.level, a.score = p.score
group by a.game_id, a.level, a.score
Actually, since your question is not clear enough, I'm not sure if this is what you're looking for.