2013-07-24 37 views
0

尋找一種方法,可以在獲得最終數據時生成歷史數據的「快照」,以及每週更改數據。重新構建歷史總計的T-SQL遞歸查詢

我在表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。

回答

0

這可能不是最好的表演查詢,但應該能正常運行的小表:

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 
0

有你可以用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