Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Triển khai chức năng phân trang (bỏ qua / lấy) với truy vấn này

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 offsetfetch 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo chỉ mục chuỗi với Mã trước tiên

  2. chuyển đổi kiểu dữ liệu varchar thành kiểu dữ liệu datetime dẫn đến giá trị nằm ngoài phạm vi

  3. Lỗi:Nhà cung cấp TCP:Mã lỗi 0x2746. Trong quá trình thiết lập Sql trong linux thông qua thiết bị đầu cuối

  4. Ba xu hướng hàng đầu ảnh hưởng đến các DBA chịu trách nhiệm giám sát máy chủ SQL

  5. Cách bỏ qua lỗi khóa trùng lặp trong T-SQL (SQL Server)