我知道标题听起来很糟糕,但我不知道如何更好地总结它。我很确定有人之前遇到过同样的问题,但我找不到任何东西。 RDBMS:MySQL。
问题: 我有以下(简化)表:
+------+------------+---------------------------------+
| name | date | score |
+------+------------+---------------------------------+
| A | 01.01.2015 | 1 |
| A | 01.02.2015 | 3 |
| A | 01.03.2015 | 4 |
| B | 01.01.2015 | 3 |
| B | 01.02.2015 | 4 |
| B | 01.03.2015 | 5 |
| C | 01.01.2015 | 1 |
| C | 01.02.2015 | 2 |
| C | 01.03.2015 | 3 |
+------+------------+---------------------------------+
没有唯一约束或PK定义。
该表代表了游戏的高分。每天都会插入所有玩家的分数,其值包括:名称,分数,现在(),...
数据代表每个玩家在特定时间得分的快照。
我想要每个用户的最新条目,但仅限于最高X玩家。所以结果看起来应该是
+------+------------+---------------------------------+
| name | date | score |
+------+------------+---------------------------------+
| A | 01.03.2015 | 4 |
| B | 01.03.2015 | 5 |
+------+------------+---------------------------------+
我希望我的意思变得清晰。
提前致谢!
答案 0 :(得分:1)
我知道你需要的是首先选择获得最高分的X球员,然后获得最新的表现。在这种情况下,您应该这样做:
SELECT *
FROM tablename t
JOIN
(
SELECT t.name, max(t.date) as max_date
FROM tablename t
JOIN
(
SELECT name
FROM
(
SELECT name, max(score) as max_score
FROM table_name
GROUP BY name
) all_highscores
ORDER BY max_score DESC
LIMIT X
) top_scores
ON top_scores.name = t.name
GROUP BY t.name
) top_last
on t.name = top_last.name
and t.date = top_last.date;