2013-07-24 2 views
0

Recherche d'un moyen de générer des «instantanés» de données historiques lorsque j'ai les données finales, et la modification des données chaque semaine.Requête récursive T-SQL pour reconstruire les totaux historiques

Je ces données dans le tableau CurrentData:

CurrentDate CurrentAmount 
-------------------------- 
2013-07-24  400 

Et j'ai aussi ces données dans le tableau ChangeData:

ChangeDate ChangeAmount 
-------------------------- 
2013-07-23  -2 
2013-07-22  -4 
2013-07-21  10 
2013-07-20   1 

Et je veux être en mesure de montrer ce que les données avaient l'air plus temps. Par exemple:

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

Comprendre je vais devoir construire le total basé hors de chaque jour les données de la veille, je l'ai essayé une pléthore de choses différentes, curseurs, tables temporaires, etc. Vous vous demandez comment j'aller sur construire ce type de vue en SQL. Je cours SQL Server 2008R2.

Répondre

0

Cela pourrait ne pas être la meilleure requête performante, mais devrait fonctionner correctement pour les petites tables:

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

Il y a un truc que vous pouvez tirer avec la clause OVER et un 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