0

当我拥有最终数据以及每周对数据的更改时,寻找一种方法来生成历史数据的“快照”。

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

4

2 回答 2

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
于 2013-07-24T23:00:25.597 回答
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
于 2013-07-24T20:14:00.653 回答