Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询高分排行榜存在问题_Sql_Mysql_Aggregate Functions - Fatal编程技术网

MySQL查询高分排行榜存在问题

MySQL查询高分排行榜存在问题,sql,mysql,aggregate-functions,Sql,Mysql,Aggregate Functions,我有一个MySQL游戏高分表,显示了一年中过去每一天的每日高分。现在我正在做一个PHP for循环,并每天进行一个单独的查询,但是表变得太大了,所以我想把它压缩成一个简单的MySQL语句 这是我现在的新查询。提交的日期是一个时间戳: SELECT date(date_submitted) as subDate, name, score FROM highScores WHERE date_submitted > "2009-07-16" GROUP BY subDate ORDER BY

我有一个MySQL游戏高分表,显示了一年中过去每一天的每日高分。现在我正在做一个PHP for循环,并每天进行一个单独的查询,但是表变得太大了,所以我想把它压缩成一个简单的MySQL语句

这是我现在的新查询。提交的日期是一个时间戳:

SELECT date(date_submitted) as subDate, name, score FROM highScores WHERE date_submitted > "2009-07-16" GROUP BY subDate ORDER BY subDate DESC, score DESC LIMIT 10;
输出:

+------------+------------+--------+
| subDate    | name       | score  |
+------------+------------+--------+
| 2010-07-18 | krissy     | 959976 |
| 2010-07-10 | claire     | 260261 |
| 2010-07-05 | krissy     | 771416 |
| 2010-06-19 | krissy     | 698031 |
| 2010-06-18 | otli       | 264898 |
| 2010-06-15 | robbie     |  82303 |
| 2010-06-01 | dad        | 480469 |
| 2010-05-29 | vicente    | 124149 |
| 2010-05-27 | dad        | 564007 |
| 2010-05-26 | caleb      | 502623 |
+------------+------------+--------+
+--------+--------+---------------------+
| name   | score  | date_submitted      |
+--------+--------+---------------------+
| john   | 304095 | 2010-06-15 22:58:02 |
| april  | 247126 | 2010-06-15 21:25:31 |
| orli   | 166021 | 2010-06-15 21:25:31 |
| robbie |  82303 | 2010-06-15 11:38:39 |
+--------+--------+---------------------+
我的问题是,当它按子日期分组时,它对当天最早的时间戳的得分最高,正如您在下一个查询中所看到的:

SELECT name, score, date_submitted FROM highScores WHERE date(date_submitted)='2010-06-15' GROUP BY name ORDER BY score DESC;
输出:

+------------+------------+--------+
| subDate    | name       | score  |
+------------+------------+--------+
| 2010-07-18 | krissy     | 959976 |
| 2010-07-10 | claire     | 260261 |
| 2010-07-05 | krissy     | 771416 |
| 2010-06-19 | krissy     | 698031 |
| 2010-06-18 | otli       | 264898 |
| 2010-06-15 | robbie     |  82303 |
| 2010-06-01 | dad        | 480469 |
| 2010-05-29 | vicente    | 124149 |
| 2010-05-27 | dad        | 564007 |
| 2010-05-26 | caleb      | 502623 |
+------------+------------+--------+
+--------+--------+---------------------+
| name   | score  | date_submitted      |
+--------+--------+---------------------+
| john   | 304095 | 2010-06-15 22:58:02 |
| april  | 247126 | 2010-06-15 21:25:31 |
| orli   | 166021 | 2010-06-15 21:25:31 |
| robbie |  82303 | 2010-06-15 11:38:39 |
+--------+--------+---------------------+
正如你所看到的,可怜的约翰应该成为2010-06-15年度的领导者。有人能帮忙吗?希望这是我忽略的真正简单的事情。在第一次查询中,我尝试在FROM部分之前使用maxscore,它给了我正确的分数,但没有保留名称

谢谢您的帮助。

添加一个

ORDER BY userScore DESC 
在第二个查询的末尾

SELECT userName, userScore, subDate FROM (
    SELECT 
        userName,
        userScrore,
        DATE(submitDate) as subDate,
        @rn := CASE WHEN @subDate = DATE(submitDate)
                THEN @rn + 1
                ELSE 1
           END AS rn,
        @subDate := DATE(submitDate)
    FROM (SELECT @subDate := NULL) vars, highScores
    ORDER BY submitDate, userScore DESC
) deriv
WHERE rn=1;

另请参见另一个问题的答案

I在第二个查询结束时按分数说明排序。因此,该查询排序正确。我只是尝试在第一个查询中将score DESC更改为score ASC,只是想看看它是否确认了订单的第二部分,并且在第一个查询中给了我完全相同的输出,这很奇怪。看起来它纠正了第二个输出,除非我弄错了。是的,它现在对第二个输出进行排序。它显示john是当天的最高分数,但仍然在第一个查询中,我是否得分ASC或得分DESC并不重要。我想我可能需要做一些复杂的事情,比如第二个答案。嘿,谢谢。这超出了我的MySQL经验,但我想我已经开始理解它了。但是,当我从MySQL命令行运行此命令时:选择name、score、subDate from SELECT name、score、DATEdate_subDate、@rn。。。。。等我得到这个错误:错误1064 42000:您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,以了解第2行“选择名称、分数、日期提交为”附近使用的正确语法。我只是尝试了一次,并重写它,而不是复制粘贴,它的工作!我得到的错误是一些额外的空白行或复制它的东西。