0

我正在尝试计算表上的运行总计,同时限制查询返回的行数。

我的桌子看起来像这样:

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

我想将返回的结果限制在特定的日期范围内,同时仍然从表的开头计算运行总计。因此,例如,我想要日期在 2009 年 2 月 20 日或之后的所有行。然后,我希望我的结果集如下所示:

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

但如果我只是做 a where somedate > 20/Feb/09,那么我得到

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

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

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

4

1 回答 1

2

您可以使用子查询来执行此操作:

SELECT *
FROM (select id,
       somedate,
       somevalue,
       sum(somevalue) over(order by somedate) as runningtotal
      from TestTable
      )sub
WHERE somedate > '2009-02-20'
于 2013-07-01T19:36:49.143 回答