2015-01-20 2 views
0

У меня есть таблица, которая выглядит, как показано нижеПолучить первые 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 (время тратится на сервер в текущий месяц) каждого сервера

ответ

0

Nest ваш запрос в другой, который получает IP-адреса;.

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