Mega Code Archive

 
Categories / Oracle PLSQL / Analytical Functions
 

Avg over ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)

SQL> create table TestTable (   2    x    number primary key,   3    y    number   4  ); Table created. SQL> insert into TestTable values (1, 7 ); 1 row created. SQL> insert into TestTable values (2, 1 ); 1 row created. SQL> insert into TestTable values (3, 2 ); 1 row created. SQL> insert into TestTable values (4, 5 ); 1 row created. SQL> insert into TestTable values (5, 7 ); 1 row created. SQL> insert into TestTable values (6, 34 ); 1 row created. SQL> insert into TestTable values (7, 32 ); 1 row created. SQL> insert into TestTable values (8, 43 ); 1 row created. SQL> insert into TestTable values (9, 87 ); 1 row created. SQL> insert into TestTable values (10, 32 ); 1 row created. SQL> insert into TestTable values (11, 12 ); 1 row created. SQL> insert into TestTable values (12, 16 ); 1 row created. SQL> insert into TestTable values (13, 63 ); 1 row created. SQL> insert into TestTable values (14, 74 ); 1 row created. SQL> insert into TestTable values (15, 36 ); 1 row created. SQL> insert into TestTable values (16, 56 ); 1 row created. SQL> insert into TestTable values (17, 2 ); 1 row created. SQL> SQL> select * from TestTable;          X          Y ---------- ----------          1          7          2          1          3          2          4          5          5          7          6         34          7         32          8         43          9         87         10         32         11         12         12         16         13         63         14         74         15         36         16         56         17          2 17 rows selected. SQL> SQL> SQL> SELECT x, y,   2    AVG(y) OVER(ORDER BY x   3      ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) ma   4  FROM TestTable   5  ORDER BY x;          X          Y         MA ---------- ---------- ----------          1          7          4          2          1 3.33333333          3          2 2.66666667          4          5 4.66666667          5          7 15.3333333          6         34 24.3333333          7         32 36.3333333          8         43         54          9         87         54         10         32 43.6666667         11         12         20         12         16 30.3333333         13         63         51         14         74 57.6666667         15         36 55.3333333         16         56 31.3333333         17          2         29 17 rows selected. SQL> SQL> SQL> drop table TestTable; Table dropped. SQL> SQL>