我有一个排名系统,可以在其中保存每个游戏日的用户排名和积分。

现在我的问题是我想获取自上一天以来用户攀登的排名位置数。因此,在此示例中,user_id = 1自昨天以来已经下跌了3个位置。我当前的查询给了我想要的东西,但是有一些额外的计算要删除。所以我的问题是如何计算每个用户(今天和昨天之间)的排名差异?
SQL FIDDLE

最佳答案

SELECT current.user_id,(last.rank -current.rank)
FROM ranking as current
LEFT JOIN ranking as last ON
last.user_id = current.user_id
WHERE current.rank_date = (SELECT max(rank_date) FROM ranking)
and
last.rank_date = (SELECT max(rank_date) FROM ranking
 where rank_date <  (SELECT max(rank_date) FROM ranking)
                 )

09-25 19:14