【问题标题】:SQL Offset based on ID基于 ID 的 SQL 偏移量
【发布时间】:2014-09-11 09:49:53
【问题描述】:

尝试根据用户 ID 查找 3 行。

结果应该与当前用户和前后行偏移:

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?

【问题讨论】:

  • 你说的是用户ID?
  • 添加了基于非标准语法的SQL Server

标签: sql sql-server offset


【解决方案1】:

您应该查看OFFSETFETCH 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

【讨论】:

  • 如果在查询运行之前位置未知。这怎么可能?用户可能在位置 7 或 87。
  • 您可以创建一个参数@position 并使用提供的人的位置填充它,然后将OFFSET 87 ROWS 更改为类似于OFFSET (@position - 1) ROWS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多