Ответ 1
В SQL Server 2012 очень легко
SELECT col1, col2, ...
FROM ...
WHERE ...
ORDER BY -- this is a MUST there must be ORDER BY statement
-- the paging comes here
OFFSET 10 ROWS -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows
Если мы хотим пропустить ORDER BY, мы можем использовать
SELECT col1, col2, ...
...
ORDER BY CURRENT_TIMESTAMP
OFFSET 10 ROWS -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows
(Я бы предпочел отметить это как взломать, но он использовался, например, NHibernate. Использовать разумно подобранный столбец как ORDER BY является предпочтительным способом)
чтобы ответить на вопрос:
--SQL SERVER 2012
SELECT PostId FROM
( SELECT PostId, MAX (Datemade) as LastDate
from dbForumEntry
group by PostId
) SubQueryAlias
order by LastDate desc
OFFSET 10 ROWS -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows
Были введены новые ключевые слова offset
и fetch next
(только следующие стандарты SQL).
Но я предполагаю, что вы не используете SQL Server 2012, правильно? В предыдущей версии это немного (немного) сложно. Вот сравнение и примеры для всех версий SQL-сервера: здесь
Итак, это может работать в SQL Server 2008:
-- SQL SERVER 2008
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 10,@End = 20;
;WITH PostCTE AS
( SELECT PostId, MAX (Datemade) as LastDate
,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber
from dbForumEntry
group by PostId
)
SELECT PostId, LastDate
FROM PostCTE
WHERE RowNumber > @Start AND RowNumber <= @End
ORDER BY PostId