我当前的应用程序根据每个用户的所有记录计算点平均值:
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 条记录计算平均值?