Среднее из последних 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 записей для каждого пользователя?

Ответы на вопрос(5)

Ваш ответ на вопрос