Запрос похож на TOP 10, чтобы выбрать промежуточные записи? - PullRequest
2 голосов
/ 27 апреля 2009

У меня есть 100 записей, в которых я могу выбрать 10 лучших, используя «ТОП 10» в запросе. Точно так же есть что-нибудь, чтобы получить запись с 20-го по 30-й?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2009

Поскольку вы используете SQL Server 2005, вы можете использовать "новую" функцию ROW_NUMBER (). Это даст вам строку с 11 по 20:

SELECT  Description, Date
FROM     (SELECT  ROW_NUMBER() OVER (ORDER BY Date DESC)
             AS Row, Description, Date FROM LOG)
            AS LogWithRowNumbers
WHERE  Row >= 11 AND Row <= 20

Если у вас много записей, использование TOP X во внутреннем предложении SELECT может немного ускорить процесс, поскольку бесполезно возвращать 1000 записей, если вы собираетесь получать записи только с 11 по 20:

SELECT  Description, Date
FROM     (SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY Date DESC)
             AS Row, Description, Date FROM LOG)
            AS LogWithRowNumbers
WHERE  Row >= 11 AND Row <= 20

Источник

1 голос
/ 27 апреля 2009

Вы должны использовать ROWNUMBER (), чтобы получить номер записи набора результатов и отфильтровать его, где причина.

SELECT * FROM   (SELECT ROW_NUMBER() OVER(ORDER BY name) AS
rownum, name , age FROM Table) AS Table1
WHERE rownum >= 2 AND rownum <= 5

----------------------------
rownum     | name |   age   |
----------------------------
   2     |John    |   25    | 
   3     |Adam    |   23    | 
   4     |Tom     |   19    |
   5     |Jame    |   22    |
----------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...