Durchschnitt der letzten N Datensätze pro Gruppe
Meine aktuelle Anwendung berechnet einen Punktedurchschnitt basierend auf allen Datensätzen für jeden Benutzer:
SELECT `user_id`, AVG(`points`) AS pts
FROM `players`
WHERE `points` != 0
GROUP BY `user_id`
Die Geschäftsanforderungen haben sich geändert, und ich muss den Durchschnitt basierend auf den letzten 30 Datensätzen für jeden Benutzer berechnen.
Die relevanten Tabellen haben folgenden Aufbau:
Tisch: Spieler; Spalten: player_id, user_id, match_id, points
Tabelle: Benutzer; Spalten: user_id
Die folgende Abfrage funktioniert nicht, zeigt jedoch die Logik, die ich implementieren möchte.
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
Gibt es eine ziemlich effiziente Möglichkeit, die Durchschnittswerte basierend auf den letzten 30 Datensätzen für jeden Benutzer zu berechnen?