使用MariaDB并尝试查看是否可以根据创建日期获取表中每一行的原始排名。
例如,想象一个分数表,对于不同的用户和类别具有不同的分数(在本例中分数越低越好)
| 身份证|排行榜ID|用户ID|刻痕|提交时间↓|提交时排名|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 九|十五|五百五十五|五十点五|2022年1月20日01时00分|第二章|
| 八个|十五|九九九|58岁|2022年1月19日01时00分|三个|
| 七|十五|九九九|五十九点一|2022年1月15日01时00分|三个|
| 六个|十五|一百二十三|四十九岁|2022年1月12日01时00分|1个|
| 五个|十五|二百二十二|51.0分|2022年1月10日01时00分|1个|
| 四个|十四|二百二十二|八十七岁|2022年1月9日01时00分|1个|
| 五个|十五|五百五十五|51.0分|2022年1月4日01时00分|1个|
"rankAtSubmit"列是我在这里尝试生成的列(如果可能)。
- 我想获得每个用户+排行榜的最高/最低分数,并确定该分数在提交时的排名。**
我的尝试失败了,因为在MySQL中,您不能在子查询中引用深度超过1级的外部级列,从而导致在以下查询中尝试引用t.submittedAt
时出错:
SELECT *, (
SELECT ranking FROM (
SELECT id, RANK() OVER (PARTITION BY leaderboardId ORDER BY score ASC) ranking
FROM scores x
WHERE x.submittedAt <= t.submittedAt
GROUP BY userId, leaderboardId
) ranks
WHERE ranks.id = t.id
) rankAtSubmit
FROM scores t
2条答案
按热度按时间but5z9lq1#
我没有使用
RANK()
,而是使用一个子查询来实现这一点,该子查询计算分数低于给定分数并在给定分数之前提交的用户的数量。ktecyv1j2#
我从你的问题中理解到你想知道每个用户的最小和最大等级。