Tsql 重建历史总计的T-SQL递归查询

Tsql 重建历史总计的T-SQL递归查询,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,寻找一种在我有最终数据和每周数据更改时生成历史数据“快照”的方法 我在CurrentData表中有此数据: CurrentDate CurrentAmount -------------------------- 2013-07-24 400 我在ChangeData表中也有这些数据: ChangeDate ChangeAmount -------------------------- 2013-07-23 -2 2013-07-22 -4

寻找一种在我有最终数据和每周数据更改时生成历史数据“快照”的方法

我在CurrentData表中有此数据:

CurrentDate   CurrentAmount
--------------------------
2013-07-24        400
我在ChangeData表中也有这些数据:

ChangeDate    ChangeAmount
--------------------------
2013-07-23        -2
2013-07-22        -4
2013-07-21        10
2013-07-20         1
我希望能够显示数据随着时间的推移是什么样子的。例如:

TotalDate     TotalAsOfThisDate
--------------------------------
2013-07-24        400
2013-07-23        402
2013-07-22        406
2013-07-21        396
2013-07-20        395

了解到我必须根据每天前一天的数据构建总计,我尝试了大量不同的东西,如游标、临时表等。我想知道如何在SQL中构建这种类型的视图。我正在运行SQL Server 2008R2。

这可能不是性能最好的查询,但对于小型表应该可以正常工作:

SELECT CurrentDate as TotalDate, CurrentAmount as TotalAsOfThisDate
FROM CurrentData
UNION ALL
SELECT ChangeDate, (SELECT CurrentAmount from CurrentData)  
                  -(SELECT SUM(ChangeAmount) 
                    FROM ChangeData cd2 
                    WHERE cd2.ChangeDate >= cd1.ChangeDate)
FROM ChangeData cd1
ORDER BY TotalDate DESC

有一个技巧,你可以用OVER子句和一个CTE

  ;WITH Source AS (
        SELECT  CurrentDate , CurrentValue FROM CurrentData
        UNION   
        SELECT  ChangeDate , -ChangeAmount FROM ChangeData  )

SELECT CurrentDate,  SUM(CurrentValue)   
OVER (ORDER BY CurrentDate DESC)
FROM Source