ROW_NUMBER()第一次没有返回好的项目数

时间:2012-04-01 11:38:49

标签: sql sql-server sql-server-2008 tsql stored-procedures

我从按降序日期排序的项目数据库列表中获取 我使用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

1 个答案:

答案 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