Trong SQL Server 2012 nó rất dễ dàng
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
Nếu chúng ta muốn bỏ qua ORDER BY, chúng ta có thể sử dụng
SELECT col1, col2, ...
...
ORDER BY CURRENT_TIMESTAMP
OFFSET 10 ROWS -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows
(Tôi muốn đánh dấu đó là một cuộc tấn công - nhưng nó được sử dụng, chẳng hạn như NHibernate. Để sử dụng một cột được chọn một cách khôn ngoan vì ORDER BY được ưa thích)
để trả lời câu hỏi:
--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
Các từ khóa mới offset
và fetch next
(chỉ tuân theo các tiêu chuẩn SQL) đã được giới thiệu.
Nhưng tôi đoán rằng bạn không sử dụng SQL Server 2012 , đúng ? Trong phiên bản trước, nó là một chút (một chút) khó khăn. Đây là so sánh và ví dụ cho tất cả các phiên bản máy chủ SQL:tại đây
Vì vậy, điều này có thể hoạt động trong 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