sql >> Databáze >  >> RDS >> Sqlserver

S tímto dotazem implementujte funkci stránkování (přeskočit / vzít).

V SQL Server 2012 je to velmi snadné

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

Pokud chceme přeskočit ORDER BY, můžeme použít

SELECT col1, col2, ...
  ...
 ORDER BY CURRENT_TIMESTAMP
OFFSET     10 ROWS       -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows

(Raději bych to označil jako hack – ale používá to např. NHibernate. Upřednostňuje se použití moudře vybraného sloupce jako ORDER BY)

odpovědět na otázku:

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

Nová klíčová slova offset a fetch next (pouze podle standardů SQL).

Myslím ale, že nepoužíváte SQL Server 2012 , správně ? V předchozí verzi je to trochu (trochu) obtížné. Zde je srovnání a příklady pro všechny verze SQL serveru:zde

Takže by to mohlo fungovat v 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. Nastavte databázi a vytvořte uživatele pouze pro čtení v AWS Redshift a Mysql

  2. Jak vložit data z jedné databázové tabulky do jiné databázové tabulky v Mysql

  3. AKTUALIZACE Statistik

  4. jaká je escape sekvence pro pomlčku (-) v PostgreSQL