Question

Anyone know how to get the most RECENT, maximum score from this table:

----------------------------------------
|id |game_id |level |score |date       |
----------------------------------------
|1  |0       |1     |90    |1391989720 |
|1  |0       |1     |95    |1391989721 |
|1  |0       |1     |95    |1391989722 |
|1  |1       |1     |4     |1391989723 |
|1  |1       |1     |8     |1391989724 |
|1  |1       |2     |6     |1391989725 |
----------------------------------------

So far I have this:

SELECT progress_max.game_id, 
       progress_max.level, 
       progress_max.date AS max_date,              
       max_score 
FROM 
(
    SELECT game_id, level, MAX(score) AS max_score
    FROM cdu_user_progress 
    WHERE lesson_id = 1 
    GROUP BY game_id, level 
) AS ms 
JOIN cdu_user_progress progress_max ON progress_max.game_id = ms.game_id AND progress_max.level = ms.level AND progress_max.score = ms.max_score 
WHERE progress_max.lesson_id = 1 
GROUP BY game_id, level

But that only gets me the FIRST maximum score (date 1391989721)...

No correct solution

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top