查询以计算SUM与先前SUM,GROUP BY不连续日期之间的差异

时间:2013-10-21 14:29:55

标签: sql ms-access ms-access-2007

我有以下查询,它给出了投资组合的每日总价值。

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/20131/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

这样我可以采取我的正常方法。

否则,是否有更有效的方法来执行此任务?

1 个答案:

答案 0 :(得分: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)

;