次のような自分自身への参照を持つテーブルがあります。
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
これは非常に遅いです。
テーブルを変更せずにこれらの違いをより速く取得するにはどうすればよいですか?