0

次のような自分自身への参照を持つテーブルがあります。

Id   Total   Prev   Session
1  | 10    | NULL | 1
2  | 15    | 1    | 1
3  | 11    | NULL | 2
4  | 29    | 2    | 1
5  | 19    | 3    | 2
6  | 47    | 4    | 1

そして、特定のセッションの違いを取得する必要があります。
セッション 1 の場合は次のようになります。

1. 10 -- None to 10
2. 5  -- 10 to 15
3. 14 -- 15 to 29
4. 18 -- 29 to 47

これを行うには、次を使用します。

SELECT  F.Total - P.Total AS Difference
FROM    Foo F LEFT OUTER JOIN
        Foo P ON F.Prev = P.Id
WHERE   Session = @Session

これは非常に遅いです。
テーブルを変更せずにこれらの違いをより速く取得するにはどうすればよいですか?

4

1 に答える 1

2

それはいけません。SessionPrevおよびにインデックスを追加すると、はるかに高速になる可能性がありますが、これは可能な最速のクエリですId

于 2012-12-03T11:25:52.810 に答える