【问题标题】:Get first 5 records of each "group"获取每个“组”的前 5 条记录
【发布时间】:2015-01-20 21:46:05
【问题描述】:

我有一个如下所示的表格

pid     server              time        day
89663   185.x.x.55:27015    463     2015-01-20
89684   185.x.x.55:27015    29      2015-01-20
61102   185.x.x.55:27015    309     2015-01-20
5748    185.x.x.55:27015    684     2015-01-20
317     79.x.x.40:27018     2410    2015-01-20
54499   79.x.x.40:27018     12921   2015-01-20
27176   80.x.x.12:27019     6711    2015-01-20
81564   80.x.x.12:27019     1095    2015-01-20
25628   185.x.x.55:27015    161     2015-01-20

PID是玩家ID,时间以秒为单位

我想查询每个服务器的前 5 名玩家在游戏上花费了多少时间。我写了一个查询:

SELECT `name`, `time`
FROM (
    SELECT `pid`, SUM(`time`) AS `time`
    FROM `stats_general`
    WHERE `server` = '{$ip}'
    AND `day` LIKE CONCAT(DATE_FORMAT(NOW(),'%Y-%m-'),'%')
    GROUP BY `pid`
    ORDER BY `time` DESC
    LIMIT 0,5
) AS g
JOIN `stats_players` AS p ON g.pid = p.id

不幸的是,这个查询有不好的一面。它仅显示一台服务器的前 5 名。我希望查询显示每台服务器的前 5 名(我不想使用 UNION,它会导致脚本执行很长时间。

总结。我想要一个查询,它将显示每台服务器的前 5 个(当月在服务器上花费的时间)。

【问题讨论】:

    标签: mysql group-by sum


    【解决方案1】:

    将您的查询嵌套在另一个获取 IP 地址的查询中;

    SELECT `server` FROM `stats_general` WHERE 1 GROUP BY `server`
    

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      相关资源
      最近更新 更多