Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 У меня криво работает ROWS FETCH NEXT  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 522
Господа, здраствуйте!
Использую своеобразный пейджинг, и вот заметил, что есть косяк почему-то для последней страницы записей (точнее они первые самые). Использую 2 запроса для этого. Вначале запрос количества:
SELECT Count(*)  FROM Orders o 
INNER JOIN OrderItems oi ON o.ID = oi.OrderID 
INNER JOIN Products p ON oi.ProductID = p.ID 
INNER JOIN Sizes sz ON p.ID = sz.ID

Возвращает 5954 записей.

Клиентский пейджинг делится по 50 страниц.
Теперь мне надо получить последнюю страницу пейджинга с отсортированными по убыванию записями.
Я делю 5954 / 50, получаю 118 полных страниц и одну не полную. Умножаю 118 * 50 и получаю "адрес" 119 страницы.
Отбираю данные:
SELECT o.ID, o.OrderNumber FROM Orders o 
INNER JOIN OrderItems oi ON o.ID = oi.OrderID 
INNER JOIN Products p ON oi.ProductID = p.ID 
INNER JOIN Sizes sz ON p.ID = sz.ID 
ORDER BY OrderNumber DESC OFFSET 5900 ROWS FETCH NEXT 50 ROWS ONLY

И вот тут не верно... Отдаёт по убыванию записи, но никогда до первой. Т.е. возвращает до 100 записи.
А как сделать до самой первой?

Даже если сделаю OFFSET 5944, то отдаст только 10 записей, до 100 всё равно.
Сами записи с 1-ой по сотую в таблице есть. Как можно получить реальную последнюю страницу с записями до самой первой?
1 мар 17, 12:39    [20253767]     Ответить | Цитировать Сообщить модератору
 Re: У меня криво работает ROWS FETCH NEXT  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
palladin600
Даже если сделаю OFFSET 5944, то отдаст только 10 записей, до 100 всё равно.

Всего 5954 записи, указываете OFFSET 5944, отдаёт оставшиеся 10 (5954 - 5944 = 10)
Что неправильно?
Как должно быть?
1 мар 17, 12:47    [20253806]     Ответить | Цитировать Сообщить модератору
 Re: У меня криво работает ROWS FETCH NEXT  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 522
Ааа... разобрался...
У одной таблицы первая сотня была с какими-то тренировочными данными, и не было связи данных с другой таблицей.
Сорри, что потревожил.
1 мар 17, 12:59    [20253834]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить