2013-07-01 5 views
0

J'essaie de calculer un total cumulé sur une table, tout en limitant le nombre de lignes renvoyées par la requête.SQL Server 2012 - Exécution de Total

Ma table ressemble à ceci:

create table TestTable 
(
    id int, 
    somedate date, 
    somevalue int 
) 

insert into TestTable values 
(45,  '01/Jan/09', 3), 
(23,  '08/Jan/09', 5), 
(12,  '02/Feb/09', 0), 
(77,  '14/Feb/09', 7), 
(39,  '20/Feb/09', 34), 
(33,  '02/Mar/09', 6) 

Et je peux obtenir toutes les lignes avec un total cumulé de « valeur » comme ceci:

select id, 
     somedate, 
     somevalue, 
     sum(somevalue) over(order by somedate) as runningtotal 
from TestTable 

Je veux limiter les résultats retournés à une plage de dates spécifique, tout en ayant le total cumulé calculé à partir du début de la table. Donc, par exemple, je veux toutes les lignes avec une date le ou après 20/Feb/09. Ensuite, je veux que mon jeu de résultats pour ressembler à:

39 20/Feb/09 49 
33 02/Mar/09 55 

Mais si je fais juste un where somedate > 20/Feb/09, puis-je obtenir

39 20/Feb/09 34 
33 02/Mar/09 40 

qui est pas ce que je veux, parce qu'il est le calcul du total en cours seulement dans la fenêtre.

Existe-t-il un moyen d'obtenir ce que je veux?

Répondre

2

Vous pouvez le faire avec une sous-requête:

SELECT * 
FROM (select id, 
     somedate, 
     somevalue, 
     sum(somevalue) over(order by somedate) as runningtotal 
     from TestTable 
    )sub 
WHERE somedate > '2009-02-20'