Sql Oracle每月滚动或运行总计

Sql Oracle每月滚动或运行总计,sql,oracle,Sql,Oracle,目标:每个月底所有报表的滚动/运行总计 代码: 电流输出: MNTH STMTS 7/1/2009 1 10/1/2010 4 6/1/2011 26 9/1/2011 211 10/1/2011 163 11/1/2011 119 期望输出: MNTH STMTS 7/1/2009 1 10/1/2010 5 6/1/2011 31 9/1/2011 242 10/1/2011 405 11/1/2011

目标:每个月底所有报表的滚动/运行总计

代码:

电流输出:

MNTH        STMTS
7/1/2009    1
10/1/2010   4
6/1/2011    26
9/1/2011    211
10/1/2011   163
11/1/2011   119
期望输出:

MNTH        STMTS
7/1/2009    1
10/1/2010   5
6/1/2011    31
9/1/2011    242
10/1/2011   405
11/1/2011   524

听起来好像你想要的是跑步总数。您可以使用分析
SUM
函数进行此操作

select mnth,
       sum(stmts) over (order by mnth) stmts
  from (select TRUNC(ACTHX.STMT_HX_STMT_DATE, 'MM') AS MNTH, 
               COUNT(ACTHX.INVOICE) as STMTS
          from ACTHX
         group by TRUNC(ACTHX.STMT_HX_STMT_DATE, 'MM'))
 ORDER BY mnth

一种替代解决方案,提供相同的滚动总计,而不使用子查询

SELECT
        DISTINCT TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM') AS MNTH
        ,count(ACTHX.INVOICE) OVER (ORDER BY TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM')) AS STMTS
    FROM  ACTHX
    ORDER BY
        TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM')

运行总数。。。是的,这就是我要找的;)
SELECT
        DISTINCT TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM') AS MNTH
        ,count(ACTHX.INVOICE) OVER (ORDER BY TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM')) AS STMTS
    FROM  ACTHX
    ORDER BY
        TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM')