У меня есть таблица, которая выглядит, как показано нижеПолучить первые 5 записей из каждой «группы»
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 является идентификатор игрока, время в секундах
Я хочу, чтобы сделать запрос, который показывает, как много времени, которое занимает 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 только для одного сервера. Я хочу, чтобы запрос отображал первую пятерку каждого сервера (я не хочу использовать UNION, он вызывает очень длительный сценарий.
Подводя итог. Мне нужен запрос, который отобразит верхнюю часть 5 (время тратится на сервер в текущий месяц) каждого сервера