私たちが
SELECT col1, col2, ...
...
ORDER BY CURRENT_TIMESTAMP
OFFSET 10 ROWS -- skip 10 rows
FETCH NEXT 10 ROWS ONLY; -- take 10 rows
を使用することができ、ORDER BYをスキップしたい場合(私はむしろハックとして、そのマークたい
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
非常に非常に簡単です。 - しかし、それは、例えば、NHibernateで使用されています。ORDER BYが好ましい方法であるように、賢明に選ばれた列を使用するには)
to質問に答える:(ちょうどSQL標準に従う)
--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 Server 2012、右?以前のバージョンでは少し難しかったです。ここでは、すべてのSQLサーバーのバージョンの比較および実施例は次のとおりです。here
だから、これはSQL Server 2008ので仕事ができる:SQL Serverでこれを行うために
-- 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
ありがとうございました!それは本当に良い答えです! SQL 2008に関する質問のみ。 ORDER BYをWHEREの前に実行したいのですが、現在はサブセットをソートしていますが、セット全体から何かを選択したいのですが...アイデアはありますか? :) もう一度、ありがとうございます –
私はあなたを正しく理解していれば、あなたはLastDateで並べ替えるのでしょうか?次のようにOVER()節を変更できます。ROW_NUMBER()OVER(ORDER BY ** MAX(Datemade)desc **) *最後のORDER BY PostId *を削除します。現在、CTEは必要に応じて「早く」ソートする必要があります。正しい? –
ありがとう、これは助け、2012年のサンプルに関する注記は必須です、私は句で順序を使わずにこれを試していたし、 "間違った構文" MSDNの構文を見て、必須です。 – Esen