如何通过Sql中的最新得分查询高分榜?

时间:2013-10-18 13:33:21

标签: mysql sql

我创建了一个MySql表,为玩家分配分数(Player1 => 2000; Player2 => 453; Player1372 => 43231)并保存包含该信息的日期。

每次比赛都会有一个新的Row添加一个新的(更好或更差)分数,所以随着时间的推移,每个玩家有几个不同的分数。我现在想查询表格,按照得分给我一个最好的球员列表,但只考虑每个球员所玩的最近的比赛,所以如果Player1的得分最高,但他的最后一场比赛真的很糟糕,他不会出现。此外,每位玩家只能在列表中出现一次。

输入示例:

Player      | Score | Date
Player 1    |   50  | 2013.10.18 
Player 3    |   35  | 2013.10.18 
Player 2    |   60  | 2013.07.03 
Player 1    |   70  | 2013.08.02 
Player 1    |   20  | 2013.09.08 
Player 2    |   85  | 2012.10.22

输出:(最佳选择)

Player      | Score | Date
Player 2    |   60  | 2013.07.03 
Player 1    |   50  | 2013.10.18 
Player 3    |   35  | 2013.10.18 

Btw:实际上它不是玩家,而是所有关于URL的评分,但这就是我描述这个问题的方式。

1 个答案:

答案 0 :(得分:3)

我假设你有一个看起来像这样的表

player | game_date |score
-------------------------
 1     | 10/12/2013| 700
 1     | 10/11/2013| 550
 2     | 10/12/2013| 100
 2     | 10/11/2013| 777
 3     | 10/10/2013| 654
 3     | 10/08/2013| 367

然后我会跑这个:

SELECT player, score
FROM tbl
JOIN (SELECT player, MAX(game_date) AS recent
      FROM tbl
      GROUP BY player) as tmp
  ON tmp.player = tbl.player
     AND tbl.game_date = tmp.recent
ORDER BY score DESC