php - MYSQL - 选择历史最高分

标签 php mysql group-by max

假设我们有如下表格

   id   |   name   |  userid  |  score  |      datestamp      |
   ------------------------------------------------------------
    1   |   john   |    1     |   44    |  2013-06-10 14:25:55 
    2   |   mary   |    2     |   59    |  2013-06-10 09:25:51 
    3   |   john   |    1     |   38    |  2013-06-10 21:25:15 
    4   |   elvis  |    3     |   19    |  2013-06-10 07:25:18
    5   |   john   |    1     |   100   |  2013-06-14 07:25:18  

我想选择每个用户的历史最高分。

例如,如果玩家 john 在 2013 年 6 月 10 日打了十轮比赛,他当天的总得分是 430。而在2013-06-14他打了16轮,当天他的总成绩是1220。我想为其他玩家显示用户 john 等的最好成绩。在上面的示例中,约翰的最佳成绩是 2013 年 6 月 14 日,得分为 1220。

详细示例: 如果用户 John 在 2013-06-10 玩了 3 轮。第一轮44分,第二轮38分,第三轮55分,当天总分137分,第二天2013-06-11打了5轮,总分220分。例如他目前最好的总分是 220。所以它应该将每天的所有分数组合到一个总分中。然后将此总计与其他天的总计进行比较,并显示该用户的最高总计

提前致谢

最佳答案

这应该可以解决问题:

SELECT userId, name, MAX(score) as highScore
FROM (
    SELECT userID, name, SUM(score) as score, date(datestamp) as scoreDate
    FROM TableName
    GROUP BY userID, scoreDate
  ) dailyScores
GROUP BY userId

内部查询获取每个用户在每个日期的总分(时间戳转换为日期以去除时间信息),然后外部查询获取每个用户每个日期的最高总分。

我冒昧地以 J W 的 fiddle 为基础,并在您的示例数据中添加了另一行,因此功能显而易见,请在此处尝试: http://www.sqlfiddle.com/#!2/f6bea/3

关于php - MYSQL - 选择历史最高分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16076949/

相关文章:

javascript - 我可以在 JavaScript 中声明一个数组中的 2 个变量吗?

php - 对 array_values 的误解

php - 如何从 HTML 标签中去除样式属性?

mysql - Node.js-将多个对象传递到同一EJS文件

sql - GROUP BY 有效,但我认为不应该

c# - groupby 之后的 linq 无法获取列值

javascript - 无法让 WordPress AJAX 工作

mysql - Quantmod:从 MySQL 数据库加载符号时出错

mysql - 复合属性索引

mysql - 使用多个 "WHERE IN"和 "OR"搜索 MySql 数据库不起作用