ROW_NUMBER () не возвращает хорошее количество элементов в первый раз - PullRequest
1 голос
/ 01 апреля 2012

Я получаю из базы данных список товаров, упорядоченных по убыванию.
Я использую функцию 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 Ответ

6 голосов
/ 01 апреля 2012

Вы фильтруете на 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
...