【问题标题】:SQL ROW_NUMBER() issue with paging分页的 SQL ROW_NUMBER() 问题
【发布时间】:2012-06-01 15:54:11
【问题描述】:

我使用ROW_NUMBER() 函数从数据库表中获取 50 x 50 项。
@From 参数是从中开始抓取 50 行的行。 (第一次是 1 即 51,101,151 等)
我将参数 @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

【问题讨论】:

    标签: sql sql-server database tsql row-number


    【解决方案1】:

    在您的版本中,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
    

    【讨论】:

      【解决方案2】:

      我猜你想做的是在内部选择查询中过滤 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
      

      【讨论】:

        猜你喜欢
        • 2012-06-14
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-06
        • 2012-09-28
        • 2018-09-12
        • 2013-10-07
        相关资源
        最近更新 更多