创建MS SQL Server查询以确定排名
我正在创建一个应用程序,用户可以在其中进行训练。他们通过应用程序传递结果,这些结果存储在SQL Server数据库中。结果以这种方式保存在SQL Server表中: 我想写一个查询,根据每个用户的最佳分数创建排名。这就是我迄今为止所拥有的,多亏了这一点: 这将生成以下内容,其中根据用户的最佳分数创建排名: 当某个用户提交新的训练时,我想根据上次提交的训练检查他的排名,并与其他用户的最佳表现进行比较。所以假设用户_id 2添加了一个新的训练,他的分数是,比如说,12,那么基于这个新的表现,他目前的排名是多少?如果是那样的话,他在这张桌子上排名第二。谢谢。试试这个:创建MS SQL Server查询以确定排名,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在创建一个应用程序,用户可以在其中进行训练。他们通过应用程序传递结果,这些结果存储在SQL Server数据库中。结果以这种方式保存在SQL Server表中: 我想写一个查询,根据每个用户的最佳分数创建排名。这就是我迄今为止所拥有的,多亏了这一点: 这将生成以下内容,其中根据用户的最佳分数创建排名: 当某个用户提交新的训练时,我想根据上次提交的训练检查他的排名,并与其他用户的最佳表现进行比较。所以假设用户_id 2添加了一个新的训练,他的分数是,比如说,12,那么基于这个新的表现,他目前的
DECLARE @CurrentUser INT = 5;
WITH DataSource AS
(
SELECT id,
workout_id,
level_id,
user_id,
total_time,
score,
datetime_added,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY score DESC, datetime_added DESC) rowID
FROM nodefit_rankings_fitness
WHERE user_id <> @CurrentUser
UNION ALL
SELECT id,
workout_id,
level_id,
user_id,
total_time,
score,
datetime_added,
ROW_NUMBER() OVER (ORDER BY datetime_added DESC) rowID
FROM nodefit_rankings_fitness
WHERE user_id = @CurrentUser
)
SELECT *
,ROW_NUMBER() OVER (ORDER BY score DESC) AS RankID
FROM DataSource
WHERE rowID = 1
ORDER BY RankID
DECLARE @CurrentUser INT = 5;
WITH DataSource AS
(
SELECT id,
workout_id,
level_id,
user_id,
total_time,
score,
datetime_added,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY score DESC, datetime_added DESC) rowID
FROM nodefit_rankings_fitness
WHERE user_id <> @CurrentUser
UNION ALL
SELECT id,
workout_id,
level_id,
user_id,
total_time,
score,
datetime_added,
ROW_NUMBER() OVER (ORDER BY datetime_added DESC) rowID
FROM nodefit_rankings_fitness
WHERE user_id = @CurrentUser
)
SELECT *
,ROW_NUMBER() OVER (ORDER BY score DESC) AS RankID
FROM DataSource
WHERE rowID = 1
ORDER BY RankID