这是我的疑问:
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。
答案 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
CTE2
将ROW_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的限制