Średnia ostatnich N rekordów na grupę

Moja aktualna aplikacja oblicza średnią punktową na podstawie wszystkich rekordów dla każdego użytkownika:

SELECT `user_id`, AVG(`points`) AS pts 
FROM `players` 
WHERE `points` != 0 
GROUP BY `user_id`

Wymagania biznesowe uległy zmianie i muszę obliczyć średnią na podstawie ostatnich 30 rekordów dla każdego użytkownika.

Odpowiednie tabele mają następującą strukturę:

table: gracze; kolumny: id_użytkownika, id_użytkownika, id_do dopasowania, punkty

tabela: użytkownicy; kolumny: id_użytkownika

Następujące zapytanie nie działa, ale demonstruje logikę, którą próbuję zaimplementować.

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

Czy istnieje dość skuteczny sposób obliczania średnich na podstawie ostatnich 30 rekordów dla każdego użytkownika?

questionAnswers(5)

yourAnswerToTheQuestion