ใน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
ถ้าเราต้องการข้ามคำสั่งซื้อโดยเราสามารถใช้
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