Создайте запрос MS SQL Server для определения рейтинга - PullRequest
1 голос
/ 07 июня 2019

Я создаю приложение, где пользователи делают тренировки. Они передают свои результаты через приложение, и эти результаты сохраняются в базе данных SQL Server. Результаты сохраняются таким образом в таблице SQL Server:

enter image description here

Я хочу написать запрос для создания рейтинга, основанного на лучшем балле каждого пользователя. Это то, что у меня есть (спасибо этому сообщению ):

SELECT id, workout_id, level_id, user_id, total_time, score, datetime_added
FROM nodefit_rankings_fitness nrf
WHERE nrf.id = (SELECT TOP (1) nrf2.id
                FROM nodefit_rankings_fitness nrf2
                WHERE nrf2.user_id = nrf.user_id
                ORDER BY nrf2.score DESC
               )
ORDER BY score DESC, datetime_added DESC;

При этом создается рейтинг, основанный на лучшем балле для пользователя:

enter image description here

Когда определенный пользователь отправляет новую тренировку, я хочу проверить его рейтинг на основе последней отправленной тренировки по сравнению с лучшими показателями других пользователей. Итак, предположим, что user_id 2 добавляет новую тренировку, и его оценка, скажем, 12, каков его текущий рейтинг на основе этой новой производительности? В этом случае он занимает второе место в этой таблице. Благодаря.

1 Ответ

1 голос
/ 07 июня 2019

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...