sql >> Database >  >> RDS >> Sqlserver

Implementeer paging (overslaan / nemen) functionaliteit met deze query

In SQL Server 2012 het is heel erg makkelijk

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

Als we ORDER BY willen overslaan, kunnen we

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

(Ik zou dat liever als een hack markeren - maar het wordt gebruikt, bijvoorbeeld door NHibernate. Om een ​​verstandig opgepikte kolom te gebruiken, aangezien ORDER BY de voorkeur heeft)

om de vraag te beantwoorden:

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

Nieuwe trefwoorden offset en fetch next (alleen volgens de SQL-standaarden) werden geïntroduceerd.

Maar ik vermoed dat je SQL Server 2012 niet gebruikt , rechts ? In de vorige versie is het een beetje (beetje) moeilijk. Hier is een vergelijking en voorbeelden voor alle SQL-serverversies:hier

Dit zou dus kunnen werken in 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. Hoe vind je vergelijkbare resultaten en sorteer je op overeenkomst?

  2. Werken uw medewerkers op afstand? Hier leest u hoe u uw gegevens veilig kunt houden.

  3. SQL Server SELECTEER IN @variabele?

  4. E-mail verzenden vanaf een trigger in SQL Server (T-SQL)