Oracle SQL:使用上一行计算值

时间:2016-06-12 17:10:40

标签: sql oracle select

我有一个包含两列的表:Cur_value和Difference

function applyCss(itemtochange){


var $style = 'color: rgb(69, 69, 68); line-height: 85px; height: 85px; padding-right: 15px; border-radius: 0px; padding-left: 15px; padding-top: 0px; background-color: rgba(0, 25, 255, 1); '; 
var $convertstyle = $style.split('; ');

$.each($convertstyle,function(index,val){

    if(val){
        var $splitv = val.split(':');
        var $property = $splitv[0];
        var $value = $splitv[1];

        $(itemtochange).css($property ,$value);
    }

});
}

现在我想计算从行(1)到行(7)的Cur_value值,以便

cur_value(t)= cur_value(t-3)+ dif(t)。

这意味着我的结果是:

       Cur_value        Difference
(-3)       3    
(-2)       4    
(-1)       5    
(1)                        1
(2)                       -2
(3)                        3
(4)     
(5)     
(6)     
(7)     

。 我的问题是:如何通过单个Oracle SQL语句执行此操作?

2 个答案:

答案 0 :(得分:3)

请注意,数据库表没有任何内在顺序。假设您有一些id或其他列,您可以使用它来定义行'您可以使用lag函数获取t-3记录:

SELECT cur_value, 
       difference, 
       LAG(cur_value, 3, 0) OVER (ORDER BY id) + difference AS new_cur_value
FROM   my_table

答案 1 :(得分:1)

您需要将行划分为3并获取累计总和。像这样:

  select t.*,
         (max(cur_value) + over (partition by grp) +
          sum(difference) over (partition by grp order by id)
         ) as value
  from (select t.*, mod(row_number() over (order by id) , 3) as grp
        from t
       ) t

子查询将行分为三组。 max函数从第一行获取curr值。第二个是差异的累积和。