我从按降序日期排序的项目数据库列表中获取
我使用ROW_NUMBER()
函数来获得50个50项。
我第一次需要从1-50到51-100等物品
我有类型1的数据库项目,这些是我得到的项目
数据库中有数千个这样的项目
因此,当我第一次调用存储过程时,我将它传递给第一个(下一个项目的数字为50)
所以这应该给我带回前50项。现在我添加到where子句RowNum < 1+50
但是我从查询中得到的行号是:35,37,38,43,44,45,55,67
等等,所以我的存储过程只返回35 to 45
中的项目。
我想我在查询中做了一些愚蠢的错过但却找不到它。
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY Products.CreatedOnDate DESC ) AS RowNum, Products.*
FROM Products
WHERE Products.CreatedOnDate <= GETDATE()
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 1+50 -- here I use parameter but currently I hardcode '1'
AND ProductTypeId = 1
ORDER BY RowNum
答案 0 :(得分:6)
您正在对ProductTypeID
进行过滤,但使用Row_Number
的内部查询不会:
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY Products.CreatedOnDate DESC ) AS RowNum
, Products.*
FROM Products
WHERE Products.CreatedOnDate <= GETDATE()
AND ProductTypeId = 1
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 1+50
ORDER BY RowNum