sql >> Databasteknik >  >> RDS >> Sqlserver

Implementera sökning (hoppa över / ta) funktionalitet med denna fråga

I SQL Server 2012 det är väldigt väldigt enkelt

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

Om vi ​​vill hoppa över BESTÄLLNING AV kan vi använda

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

(Jag skulle hellre markera det som ett hack - men det används, t.ex. av NHibernate. Att använda en klokt upptagen kolumn som ORDER BY är att föredra)

för att svara på frågan:

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

Nya nyckelord offset och fetch next (bara efter SQL-standarder) introducerades.

Men jag antar att du inte använder SQL Server 2012 , rätt ? I tidigare version är det lite (lite) svårt. Här är jämförelse och exempel för alla SQL-serverversioner:här

Så detta kan fungera i 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. Neo4j - Släpp en begränsning med Cypher

  2. En översikt av MariaDB Xpand (tidigare ClustrixDB)

  3. Öppnar Android Sqlite Database i Fragment

  4. Hur man formaterar negativa tal med vinkelparenteser i Oracle