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. MySQLとは何ですか?

    2. PostgreSQLで挿入パフォーマンスを高速化する方法

    3. UTL_FILE.FOPEN()プロシージャがディレクトリのパスを受け入れていませんか?

    4. 文字列をコンマで結合するためのOracle集計、およびカスタム集計の記述について