Рейтинг игроков по категориям за месяцы
Представьте себе следующую таблицу Player
с полями:
PlayerId, Date, Kills and Gold
Мне нужно получить позицию игрока по категориям (убийства или золото) в течение нескольких месяцев.
Это выбор:
SET @rownumber := 0;
SELECT date, rank, kills FROM (
SELECT pla.event_date, @rownumber := @rownumber + 1 AS rank,
pla.kills, pla.player_id
FROM player AS pla
INNER JOIN ...
WHERE.pla.event_date >= '2017-09-01' AND pla.event_date <= '2017-12-31'
ORDER BY pla.kills DESC
) AS result WHERE player_id = 651894
Он отлично работает, когда я фильтрую его на один месяц.
Проблема в том, что переменная @rownumber
всегда увеличивается на +1 в следующем месяце, что не приносит нужного результата.
Я не имею в виду, что это функция для итерации по месяцам из бэкенда. Как я могу это сделать?
1 ответ:
Вам нужна другая пользовательская переменная, чтобы сообщить вам, когда это произойдет в новом месяце.
SET @rownumber := 0; SET @month := 0; SELECT pla.event_date, @rownumber := IF(@month=MONTH(pla.event_date), @rownumber + 1, 1) AS rank, @month := MONTH(pla.event_date) AS month, pla.kills, pla.player_id FROM player AS pla INNER JOIN ... WHERE pla.event_date >= '2017-09-01' AND pla.event_date <= '2017-12-31' ORDER BY MONTH(pla.event_date), pla.kills DESC