降順で並べ替えられたアイテムのデータベースリストから取得しています。
私はROW_NUMBER()
機能を使用して、50×50のアイテムを取得します。
初めて、私は51-100などより1から50のアイテムを入手する必要があります。
私はタイプ1のデータベースアイテムを持っています。
データベースには数千ものアイテムがあります。
私は最初にストアドプロシージャを呼び出すときに、それを次の50になる項目の番号(1番)に渡します。
これは私に最初の50項目を返す必要があります。今私はwhere句RowNum < 1+50
に追加しますが、クエリから取得する行番号は35,37,38,43,44,45,55,67
などです。したがって、私のストアドプロシージャは35 to 45
の項目のみを返します。 私はクエリで愚かなミスをしたが、それを見つけることができないと思う。ROW_NUMBER()が最初に好きな数のアイテムを返さない
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Products.CreatedOnDate DESC) AS RowNum, Products.*
FROM Products
WHERE Products.CreatedOnDate <= GETDATE()
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 1+50 -- here I use parameter but currently I hardcode '1'
AND ProductTypeId = 1
ORDER BY RowNum
あなたがtofoのページネーションをしたいようですか? TOP 50を使っているだけでなく、次にTOP100を内側に、TOP 50を外側にしてORDERを変更するのはなぜですか? – YvesR
私は分かりません。以前の開発者は、ROW_NUMBER()を使用する方がパフォーマンスが優れていると言っていましたが、パフォーマンスの問題がなければTOP Xを使用できます。 @Mitch Wheat:どのコードを意味していますか? – 1110
この記事をお読みください(http://blogs.msdn.com/b/conor_cunningham_msft/archive/2012/02/02/conor-vs-window-functions-sequence-ranking-functions-order-of-operations.aspx) Conor Cunninghamによって書かれています。 –