1

ポートフォリオの毎日の合計値を与える次のクエリがあります。

SELECT RecDate, Sum(Mval) as TotalVal
FROM DailyVal
WHERE RecDate >= DateValue("1/1/2013")
GROUP BY RecDate;

それはうまく機能し、次のような結果が得られます。

RecDate TotalVal
1/10/2013   4465
1/11/2013   4471
1/14/2013   4472
1/15/2013   4477

ただし、すべての行についてなどの違いを計算したいと思い1/11/2013ます。1/10/2013

私は通常INNER JOIN、エイリアスを使用してテーブルでON実行ID - 1し、必要に応じて計算を実行します。残念ながら、 で集計するときに意味のあるインデックスはありませんGROUP BY

私の質問は、実際にはクエリにインデックスを付けて次のようにする方法があるということです。

ID  RecDate TotalVal
1  1/10/2013    4465
2  1/11/2013    4471
3  1/14/2013    4472
4  1/15/2013    4477

そうすれば、通常のアプローチを取ることができます。

それ以外の場合、このタスクを実行するためのより効率的な方法はありますか?

4

1 に答える 1

0

サブクエリと自己結合を使用してこれを実行できるはずです。

SELECT 
    D1.RecDate, 
    TotalVal, 
    TotalVal - NZ(TotalVal2,0) Delta
FROM (
    SELECT RecDate, Sum(Mval) as TotalVal
    FROM DailyVal
    WHERE RecDate >= DateValue("1/1/2013")
    GROUP BY RecDate) D1
LEFT JOIN (
    SELECT RecDate, Sum(Mval) as TotalVal2
    FROM DailyVal
    WHERE RecDate >= DateValue("1/1/2013")
    GROUP BY RecDate) D2
ON D2.RecDate = (SELECT MAX(RecDate) FROM DailyVal WHERE RecDate < D1.RecDate)

;
于 2013-10-21T17:49:22.813 に答える