Tsql 重建历史总计的T-SQL递归查询
寻找一种在我有最终数据和每周数据更改时生成历史数据“快照”的方法 我在CurrentData表中有此数据: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
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