Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Приложете функционалност за пейджинг (пропускане/вземане) с тази заявка

В 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Създайте съхранена процедура

  2. Как да променя db схемата на dbo

  3. Върнете информация за версията на операционната система в SQL Server с динамичния изглед за управление sys.dm_os_host_info

  4. Променете разделителя на запетая, когато изпращате по имейл резултати от заявка в SQL Server (T-SQL)

  5. Вземете ред, където колона дата и час =днес - SQL сървър noob