特定のIDを持つ結果の周りのいくつかの行を選択したい、かなり複雑な結合クエリがあります。
現在、クエリは次のようになっています。
WITH results AS
(
SELECT t1.id, t1.position, t1.points, t2.name
ROW_NUMBER() OVER(ORDER BY t1.position ASC, t1.points DESC) AS rn
FROM Table1 t1
JOIN Table2 t2 ON t1.id = t2.Table1id
/* Several more joins here, some of which limit the result set */
)
SELECT * FROM results
WHERE rn < ( SELECT rn+3 FROM results WHERE id = @someid )
AND rn > ( SELECT rn-3 FROM results WHERE id = @someid )
これを解決するより良い方法はありますか?何よりも、おそらく巨大な CTE へのこれらの複数の呼び出しのパフォーマンスが心配です。
クエリはSQL 2008サーバーで実行されます。