我有一个排名系统,我保存每个游戏日的用户排名和积分。 查询问题排名系统MYSQL
现在我的问题是,我想获取用户自上一天以来攀升的排名位置数。所以在这个例子中,user_id = 1自昨天以来已经下降了3个仓位。我目前的查询给了我一些我想要的,但有一些额外的计算,我想删除。所以我的问题是我如何计算每个用户(今天和昨天之间)的排名差异? SQL FIDDLE
我有一个排名系统,我保存每个游戏日的用户排名和积分。 查询问题排名系统MYSQL
现在我的问题是,我想获取用户自上一天以来攀升的排名位置数。所以在这个例子中,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)
)
您是否看过OPS SQLFiddle示例? – MatBailie 2015-04-05 11:47:34
我通过编辑小提琴做了这个。 – 2015-04-05 11:55:52
谢谢@JoshuaByer这就是我一直在寻找的! – Rocksteady 2015-04-05 12:17:18
所以我的问题是我怎么计算(昨天和今天之间),每 用户排名有什么区别?
关于你sqlfiddle演示中,我想你想这样的输出:
user_id diff
1 3
1 -3
2 -1
2 -1
那么试试这个:
SELECT current.user_id,(last.rank - current.rank) as diff
FROM ranking as current
LEFT JOIN ranking as last
ON last.rank_date = current.rank_date+1
and last.user_id = current.user_id
where last.rank_date is not null
order by current.user_id
'ON last.rank_date = current.rank_date + 1'应该是'-1'以获得“上一个日期” – MatBailie 2015-04-05 12:08:52
我认为最简单的方法是:
SELECT today.user_id, (yest.rank - today.rank) as diff
FROM ranking today JOIN
ranking yest
on today.user_id = yest.user_id
WHERE today.rank_date = CURRENT_DATE AND
yest.rank_date = date_sub(CURRENT_DATE, interval 1 day);
你想仅比较“今日”和“昨天”*(3月17日和3月16日)*?或者你希望表中的每一行与前一天相比较?每个用户每天都有记录吗,还是会有差距? – MatBailie 2015-04-05 11:49:31
您还需要将'current.user_id = last.user_id'添加到您的SQL *(作为'LEFT JOIN'的一部分)*。 – MatBailie 2015-04-05 11:51:52
不,我只是想今天与昨天比较这个查询。是的,每个用户每天都会有一个记录 – Rocksteady 2015-04-05 12:20:39