2013-07-01 92 views
0

我想计算一个表上的运行总数,同时限制查询返回的行数。SQL Server 2012 - 正在运行总计

我的表看起来是这样的:

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) 

,我可以得到一个运行总计“价值”这样的所有行:

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

我想限制返回的结果到特定的日期范围,同时仍然可以从表格的开头算起运行总数。因此,例如,我想要在20/Feb/09之后或之后的所有行。然后,我希望我的结果集的样子:

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

但是,如果我只是做一个where somedate > 20/Feb/09,然后我得到

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

这不是我想要的,因为它的计算运行总计只在窗口内。

有没有办法得到我想要的东西?

回答

2

你可以使用子查询做到这一点:

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