我有一个可能是“经典”的 mysql max/group by 问题
这是我的基本表结构。
id | userid | username | date | score
1 | 1111 | joe | 2012-05-16 | 1000
2 | 2222 | john | 2012-03-17 | 2000
3 | 3333 | jill | 2012-02-11 | 3000
4 | 2222 | john | 2012-12-25 | 5000
5 | 3333 | jill | 2012-04-08 | 4000
6 | 1111 | joe | 2012-06-17 | 1000
7 | 1111 | joe | 2012-01-14 | 500
8 | 2222 | john | 2012-06-29 | 6000
9 | 4444 | bill | 2012-08-08 | 4000
我想获得每个用户的最高分。
每个用户在结果中只能显示一个分数。
My desired result is
id | userid | username | date | score
8 | 2222 | john | 2012-06-29 | 6000
9 | 4444 | bill | 2012-08-08 | 4000
5 | 3333 | jill | 2012-04-08 | 4000
6 | 1111 | joe | 2012-06-17 | 1000
如果用户的最高分数出现多次(例如 id 1&6),则应显示最近的日期。
这是我当前的查询
select s.*
from scores as s
inner join (
select userid, max(score) as max_score
from scores
group by userid
) t on s.userid = t.userid and s.score = t.max_score
order by score DESC, date DESC
这会返回错误的结果
id | userid | username | date | score
8 | 2222 | john | 2012-06-29 | 6000
9 | 4444 | bill | 2012-08-08 | 4000
5 | 3333 | jill | 2012-04-08 | 4000
6 | 1111 | joe | 2012-06-17 | 1000
1 | 1111 | joe | 2012-05-16 | 1000
关于如何解决这个问题有什么建议吗?
我还应该提到,userid 和 username 之间的关系不是一对一的。