【问题标题】:SQL Server 2012 - Running TotalSQL Server 2012 - 运行总计
【发布时间】:2013-07-01 19:35:01
【问题描述】:

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

我的桌子看起来像这样:

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

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

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

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

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

【问题讨论】:

    标签: sql sql-server cumulative-sum


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多