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

これは最高のパフォーマンスのクエリではないかもしれませんが、小さなテーブルでは問題なく動作するはずです:

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 に答える
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 に答える