选择下一组前30条记录

时间:2015-03-27 12:58:24

标签: sql-server

这是我的疑问:

SELECT Top 30 *  
FROM  (SELECT *,  Row_number() OVER( PARTITION BY EntityPicURL 
                                     ORDER BY FavoriteCount desc) AS RN
       FROM   TweetEntity   
       WHERE HashTag LIKE '%%23RIPOlgaSyahputra%') A
WHERE  RN = 1 
ORDER BY FavoriteCount desc , LastModifieddateTime desc

这将选择列entitypicURl的前30个唯一记录。现在我要选择接下来的30条记录(31-60)。

这是我之前使用的一种查询,但这会返回entitypicURL的许多重复条目。

select * 
from (select *, row_no = row_number() over (order by FavoriteCount desc,
                                                     LastModifiedDateTime desc)
      from TweetEntity 
      where HashTag like '%%23RIPOlgaSyahputra%') e 
where e.row_no > 30 and e.row_no <=60

现在我想要结合第一个查询的值,并在第二个查询中包含e.row_no>30 and e.row_no<60

这不是重复的。我的困惑只是结合了两个查询,因为它们都有row_numbers。

2 个答案:

答案 0 :(得分:1)

您可以像这样使用嵌套的CTE

;WITH CTE1 AS (
   SELECT *,  
          ROW_NUMBER() OVER(PARTITION BY EntityPicURL
                            ORDER BY FavoriteCount desc) AS RN
   FROM   TweetEntity   
   WHERE HashTag like '%%23RIPOlgaSyahputra%'
), CTE2 AS (
   SELECT *,
          ROW_NUMBER() OVER (ORDER FavoriteCount DESC, 
                                   LastModifiedDateTime DESC) AS row_no    
   FROM CTE1
   WHERE RN = 1
)
SELECT *
FROM CTE2 
WHERE row_no > 30 and row_no <=60             

CTE2ROW_NUMBER应用于{{1>} 结果集RN = 1

答案 1 :(得分:0)

您可以使用OFFSET来获取此类记录

您可以从以下查询中选择30条记录

Select * FROM   TweetEntity
ORDER BY FavoriteCount  desc OFFSET 0 ROWS FETCH NEXT 30 ROWS ONLY

您可以从以下查询中选择下一条30条记录

 Select * FROM   TweetEntity
ORDER BY FavoriteCount  desc OFFSET 30  ROWS FETCH NEXT 30 ROWS ONLY

注意: OFFSET适用于 Sql server 2012 +

使用OFFSET-FETCH的限制

  • ORDER BY必须使用OFFSET和FETCH子句。
  • OFFSET子句对FETCH是强制性的。你永远不能使用,ORDER BY ...... FETCH。
  • TOP不能在同一查询中与OFFSET和FETCH组合使用 表达
  • OFFSET / FETCH rowcount表达式可以是任何算术,常量, 或将返回整数值的参数表达式。该 rowcount表达式不支持标量子查询。