2014-09-11 3 views
0

Попытка найти 3 строки на основе идентификатора пользователя.SQL Offset на основе ID

результатов должны быть компенсирован с текущим пользователем и строкой до и после:

87. John Snow 1000p 
88. YOU 990p 
89. Jane Doe 900p 

Я переменная пользователя хранится в @currentUser и используя приведенный ниже запрос, который извлекает все соответствующие действия:

SELECT u.UserID, 
     u.ContentID, 
     (u.FirstName + ' ' + u.LastName) AS theUser, 
     SUM(l.Action) as thePoints 
FROM [AccessLog] l 
     LEFT JOIN [User] u 
      ON l.UserID = u.UserID 
WHERE l.Action = 13 
     OR l.Action = 2 
     AND l.Timestamp BETWEEN CONVERT(datetime, '2014-09-01') AND CONVERT(datetime, '2014-09-11') 
GROUP BY u.UserID, 
     u.ContentID, 
     u.FirstName, 
     u.LastName 
ORDER BY thePoints DESC 

Как я могу сделать перечисление, например. # 87 до # 89, если мое место № 88?

+0

Вы говорите об идентификаторах пользователя? – Azar

+0

Добавлен SQL Server на основе нестандартного синтаксиса –

ответ

1

Вы должны смотреть OFFSET и FETCH FIRST, хотя я считаю, что это зависит от версии используемой вами базы данных.

SELECT u.UserID, 
     u.ContentID, 
     (u.FirstName + ' ' + u.LastName) AS theUser, 
     SUM(l.Action) as thePoints 
FROM [AccessLog] l 
     LEFT JOIN [User] u 
      ON l.UserID = u.UserID 
WHERE l.Action = 13 
     OR l.Action = 2 
     AND l.Timestamp BETWEEN CONVERT(datetime, '2014-09-01') AND CONVERT(datetime, '2014-09-11') 
GROUP BY u.UserID, 
     u.ContentID, 
     u.FirstName, 
     u.LastName 
ORDER BY thePoints DESC 
offset 87 rows 
fetch first 3 rows only 
+0

Если позиция не известна до запуска запроса. Как это возможно? Пользователь может находиться в положении 7 или 87. – 2mas

+0

Вы можете создать параметр '@ position' и заполнить его с положением предоставленного лица, а затем изменить' OFFSET 87 ROWS' как нечто вроде 'OFFSET (@position - 1) ROWS' – talegna

Смежные вопросы