2

特定の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サーバーで実行されます。

4

2 に答える 2