【问题标题】:Oracle sum previous values甲骨文总和以前的值
【发布时间】:2015-02-12 09:32:11
【问题描述】:

我正在尝试执行以下操作:使用此表:

DATE       VAR       
---------------
 2011      2.82          
 2012     -3.47        
 2013     -5.8        
 2014      13

我需要获取另一个表:

 DATE    VAR       ACUM    
---------------------------------------
 2011    2.82         
 2012   -3.47     -0.65      
 2013   -5.8      -6.45      
 2014    13        6.55 

即我用 VAR 值加上所有先前值的总和添加了另一列。

for the 2014 row....13-5.8-3.47+2.82 = 6.55
for the 2013 row....-5.8-3.47+2.82 = -6.45

等等。

【问题讨论】:

    标签: sql oracle oracle11g sum


    【解决方案1】:

    使用Sum() Over() 技巧查找总和

    SELECT "DATE",
           VAR,
           Sum(VAR)OVER(ORDER BY "DATE") as ACUM
    FROM   Yourtable
    

    correlated subquery

    SELECT "DATE",
           VAR,
           (SELECT Sum(VAR)
            FROM   Yourtable b
            WHERE  a."DATE" > b."DATE") ACUM
    FROM   Yourtable a 
    

    不要使用 DATE 作为列名,您必须始终将其括在双引号中。而且您还可以通过这样做使其区分大小写。坏主意。

    【讨论】:

    • 完美!!!,我不知道求和函数的这个窗口选项。 ¡ 非常感谢!
    • 相关子查询将返回 NULL 的第一行。
    • 嘿,抱歉,也许这就是 OP 想要的,设为 NULL。
    • 您也可以使用领先或滞后功能。是的,不要在保留字之后命名列。
    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2012-07-03
    • 2011-05-13
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多