oracle计算当前行和上一行的平均值

时间:2018-10-31 01:15:00

标签: oracle plsql

我有一张下表,其中包含一列VALUE1,我想计算VALUE1中上一行与当前行之间的平均值,并在第二列VALUE2中从第二行开始进行表示,即第一行值将不能被平均。

结果应该像

ID VALUE1 VALUE2
1   3        3  
2   4        3.5
3   5         4.5
4   5         5
5   6         5.5
6   2         4

注意:对于第一行(ID = 1),我将第一行与自己平均。

任何帮助表示赞赏。预先感谢。

2 个答案:

答案 0 :(得分:2)

我认为您可以使用此查询,它给出的输出与您提到的相同。

创建表脚本:

create table practicenew (ID   number, Value1   number)  ;
insert into practicenew (ID, Value1) values (1, 3) ;
insert into practicenew (ID, Value1) values (2,4) ;
insert into practicenew (ID, Value1) values (3,5);
insert into practicenew (ID, Value1) values (4,5);
insert into practicenew (ID, Value1) values (5,6);
insert into practicenew (ID, Value1) values (6,2 ); 

然后使用NVL和滞后功能。延迟会将您先前的值带到当前行,而nvl将被用于第一行,因为使用延迟时第一行将具有空值。

 Query: select ID, value1,nvl(((lag(value1) over (order by ID) + value1)/2),value1)  as Value2 
 from practicenew; 

输出:

 ID    Value1    Value2
   1    3        3
   2    4        3.5  
   3    5        4.5
   4    5        5
   5    6        5.5
   6    2        4

希望对您有所帮助!

答案 1 :(得分:2)

您还可以在上一行和当前行的窗口中使用k分析函数:

AVG()