0

我创建了一个 MySql 表,它将分数分配给玩家 (Player1=>2000; Player2=>453; Player1372 =>43231) 并使用该信息保存日期。

每次比赛都会有一个新的行添加一个新的(更好或更差)分数,因此随着时间的推移,每个玩家都会有几个不同的分数。我现在想查询表格,为我提供按分数列出的最佳玩家列表,但只考虑每个玩家最近玩的游戏,所以如果 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 

顺便说一句:实际上它不是播放器,它完全与 URL 评分有关,但这就是我对问题的描述。

4

1 回答 1

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
于 2013-10-18T13:42:45.757 回答