Среднее из последних N записей на группу
Мое текущее приложение рассчитывает средний балл на основе всех записей для каждого пользователя:
SELECT `user_id`, AVG(`points`) AS pts
FROM `players`
WHERE `points` != 0
GROUP BY `user_id`
Бизнес-требования изменились, и мне нужно рассчитать среднее значение на основе последних 30 записей для каждого пользователя.
Соответствующие таблицы имеют следующую структуру:
стол: игроки; столбцы: player_id, user_id, match_id, очки
таблица: пользователи; столбцы: user_id
Следующий запрос не работает, но он демонстрирует логику, которую я пытаюсь реализовать.
SELECT @user_id := u.`id`, (
-- Calculate the average for last 30 records
SELECT AVG(plr.`points`)
FROM (
-- Select the last 30 records for evaluation
SELECT p.`points`
FROM `players` AS p
WHERE p.`user_id`=@user_id
ORDER BY `match_id` DESC
LIMIT 30
) AS plr
) AS avg_points
FROM `users` AS u
Существует ли достаточно эффективный способ вычисления средних значений на основе последних 30 записей для каждого пользователя?