[英]SQL ROW_NUMBER() issue with paging
我使用ROW_NUMBER()
函數從數據庫表中獲取50個50項。
@From
參數是從中開始抓取50行的行。 (第一次是51,101,151等1)
我將參數@CityId
傳遞給存儲過程,如果數據庫中的前60行是cityId=1
而cityId = 2
在第61行,則此存儲過程不返回結果。
但是,如果我通過@From參數51而不是返回結果。 我在這里做錯了什么?
SELECT RowConstrainedResult.*
FROM ( SELECT ROW_NUMBER() OVER
( ORDER BY f.ItemCreatedOnDate DESC ) AS RowNum,
f.*
FROM (
SELECT
t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items as t
) f) AS RowConstrainedResult
WHERE RowNum >= @From
AND RowNum < @From + 50
AND CityId = @CityId
在您的版本中, ROW_NUMBER()
枚舉所有行。 將cityid
的謂詞移動到最里面的選擇, ROW_NUMBER()
只枚舉cityid = 2
的行。
SELECT RowConstrainedResult.*
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY f.ItemCreatedOnDate DESC) AS RowNum,
f.*
FROM (
SELECT t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items AS t
WHERE CityId = @CityId
) AS f
) AS RowConstrainedResult
WHERE RowNum >= @From AND
RowNum < @From + 50
我想你想要做的是在內部選擇查詢中過濾CityId,如下所示:
SELECT RowConstrainedResult.*
FROM ( SELECT ROW_NUMBER() OVER
( ORDER BY f.ItemCreatedOnDate DESC ) AS RowNum,
f.*
FROM (
SELECT
t.ItemIdId,
t.ItemTypeId,
t.CreatedOnDate as ItemCreatedOnDate,
t.CityId as CityId
FROM dbo.Items as t
WHERE CityId = @CityId
) f) AS RowConstrainedResult
WHERE RowNum >= @From
AND RowNum < @From + 50
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.