Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Analytical Functions
 

An Expanded Example of a Physical Window

To expand the moving average window, we can change the clause ROWS BETWEEN x PRECEDING AND y FOLLOWING to have different values for x and y. SQL> -- create demo table SQL> create table myTable(   2    id           NUMBER(2),   3    value        NUMBER(6,2)   4  )   5  / Table created. SQL> SQL> -- prepare data SQL> insert into myTable(ID,  value)values (1,9); 1 row created. SQL> insert into myTable(ID,  value)values (2,2.11); 1 row created. SQL> insert into myTable(ID,  value)values (3,3.44); 1 row created. SQL> insert into myTable(ID,  value)values (4,-4.21); 1 row created. SQL> insert into myTable(ID,  value)values (5,10); 1 row created. SQL> insert into myTable(ID,  value)values (6,3); 1 row created. SQL> insert into myTable(ID,  value)values (7,-5.88); 1 row created. SQL> insert into myTable(ID,  value)values (8,123.45); 1 row created. SQL> insert into myTable(ID,  value)values (9,98.23); 1 row created. SQL> insert into myTable(ID,  value)values (10,938.23); 1 row created. SQL> insert into myTable(ID,  value)values (11,984.23); 1 row created. SQL> insert into myTable(ID,  value)values (12,198.23); 1 row created. SQL> insert into myTable(ID,  value)values (13,928.87); 1 row created. SQL> insert into myTable(ID,  value)values (14,25.37); 1 row created. SQL> insert into myTable(ID,  value)values (15,918.3); 1 row created. SQL> insert into myTable(ID,  value)values (16,9.23); 1 row created. SQL> insert into myTable(ID,  value)values (17,8.23); 1 row created. SQL> SQL> select * from myTable   2  /         ID      VALUE ---------- ----------          1          9          2       2.11          3       3.44          4      -4.21          5         10          6          3          7      -5.88          8     123.45          9      98.23         10     938.23         11     984.23         12     198.23         13     928.87         14      25.37         15      918.3         16       9.23         17       8.23 17 rows selected. SQL> SQL> COLUMN ma FORMAT 99999.999 SQL> SELECT id, value,   2    AVG(value) OVER(ORDER BY id   3    ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING) ma   4  FROM myTable   5  ORDER BY id;         ID      VALUE         MA ---------- ---------- ----------          1          9      5.555          2       2.11      4.850          3       3.44      2.585          4      -4.21      4.068          5         10      2.868          6          3      1.270          7      -5.88     25.272          8     123.45     45.760          9      98.23    231.406         10     938.23    427.652         11     984.23    468.474         12     198.23    629.558         13     928.87    614.986         14      25.37    611.000         15      918.3    416.000         16       9.23    378.000         17       8.23    240.283 17 rows selected. SQL> SQL> -- clean the table SQL> drop table myTable   2  / Table dropped.