Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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:获得超过“a”的排名;历史";包含消息的表_Mysql_Ranking - Fatal编程技术网

MYSQL:获得超过“a”的排名;历史";包含消息的表

MYSQL:获得超过“a”的排名;历史";包含消息的表,mysql,ranking,Mysql,Ranking,SQLfiddle: 我有一张历史记录表: CREATE TABLE IF NOT EXISTS `history` ( `history_id` int(6), `date_added` datetime, `message` varchar(200), `user_id` int(6) ); 此表由用户在特定空闲通道上发布的消息填充 现在,我想从中获得统计数据,我想知道发布消息最多的日期,与发布消息最多的用户的长时间比较&日期本身 我已经创建了此查询,但我似乎无法在其中实现

SQLfiddle:

我有一张历史记录表:

CREATE TABLE IF NOT EXISTS `history` (
  `history_id` int(6),
  `date_added` datetime,
  `message` varchar(200),
  `user_id` int(6)
);
此表由用户在特定空闲通道上发布的消息填充

现在,我想从中获得统计数据,我想知道发布消息最多的日期,与发布消息最多的用户的长时间比较&日期本身

我已经创建了此查询,但我似乎无法在其中实现“排名”:

SELECT b.cnt as dayCount, a.cnt as userCount, a.userId, b.date as dateStr, u.name as userName
            FROM ( 
                   select date_format(date_added, "%d/%m/%Y") as date, user_id as userid, count(*) as cnt from history group by userid, date_format(date_added, "%d/%m/%Y") order by cnt 
                 ) a 
            INNER JOIN ( 
                   select date_format(date_added, "%d/%m/%Y") as date, count(*) as cnt from history group by date_format(date_added, "%d/%m/%Y") 
                 ) b ON a.date = b.date 
            INNER JOIN users u ON u.user_id = a.userid 
            GROUP BY a.userId, b.date 
            ORDER BY dayCount desc, userCount desc;
结果:

+----------+-----------+--------+------------+----------------------+
| dayCount | userCount | userId | dateStr    | userName             |
+----------+-----------+--------+------------+----------------------+
|     2308 |       842 |      1 | 20/03/2018 | user1                |
|     2308 |       640 |      4 | 20/03/2018 | user4                |
|     2308 |       438 |      6 | 20/03/2018 | user6                |
|     2308 |       288 |      5 | 20/03/2018 | user5                |
|     2308 |        78 |      2 | 20/03/2018 | user2                |
|     2308 |        22 |      3 | 20/03/2018 | user3                |
|     1771 |       672 |      1 | 14/10/2019 | user1                |
|     1771 |       452 |      6 | 14/10/2019 | user6                |
|     1771 |       405 |      4 | 14/10/2019 | user4                |
|     1771 |       189 |      5 | 14/10/2019 | user5                |
|     1771 |        37 |      2 | 14/10/2019 | user2                |
|     1771 |        16 |      3 | 14/10/2019 | user3                |
在列用户名之后,应该有一个列的秩为,表示日期在整个结果集上的排名位置,对于daycount 2308,这应该是1,对于1771,这应该是2

通缉结果:

+----------+-----------+--------+------------+----------------------+--------------+
| dayCount | userCount | userId | dateStr    | userName             |   rank       |
+----------+-----------+--------+------------+----------------------+--------------+
|     2308 |       842 |      1 | 20/03/2018 | user1                |  1           |
|     2308 |       640 |      4 | 20/03/2018 | user4                |  1           |
|     2308 |       438 |      6 | 20/03/2018 | user6                |  1           |
|     2308 |       288 |      5 | 20/03/2018 | user5                |  1           |
|     2308 |        78 |      2 | 20/03/2018 | user2                |  1           |
|     2308 |        22 |      3 | 20/03/2018 | user3                |  1           |
|     1771 |       672 |      1 | 14/10/2019 | user1                |  2           |
|     1771 |       452 |      6 | 14/10/2019 | user6                |  2           |
|     1771 |       405 |      4 | 14/10/2019 | user4                |  2           |
|     1771 |       189 |      5 | 14/10/2019 | user5                |  2           |
|     1771 |        37 |      2 | 14/10/2019 | user2                |  2           |
|     1771 |        16 |      3 | 14/10/2019 | user3                |  2           |
我不确定这是不是最好的方法?例如,在历史记录表中有260.000个条目时,查询本身需要0.6秒


提前感谢。

请看:(您可能已经完成了三分之一的步骤)我添加了一个SQLFiddle,希望现在很清楚,fiddle是否包含了所需的结果?添加在主帖子中您使用的MySQL版本是什么?