The query divides the current month’s sales amount by the previous month’s sales amount
SQL> CREATE TABLE all_sales ( 2 year INTEGER, 3 month INTEGER, 4 prd_type_id INTEGER, 5 emp_id INTEGER , 6 amount NUMBER(8, 2) 7 ); Table created. SQL> SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,1 ,1 ,21 ,16034.84); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,2 ,1 ,21 ,15644.65); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,3 ,2 ,21 ,20167.83); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,4 ,2 ,21 ,25056.45); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,5 ,2 ,21 ,NULL); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,6 ,1 ,21 ,15564.66); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,7 ,1 ,21 ,15644.65); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,8 ,1 ,21 ,16434.82); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,9 ,1 ,21 ,19654.57); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,10 ,1 ,21 ,21764.19); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,11 ,1 ,21 ,13026.73); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2006,12 ,2 ,21 ,10034.64); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,1 ,2 ,22 ,16634.84); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,1 ,2 ,21 ,26034.84); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,2 ,1 ,21 ,12644.65); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,3 ,1 ,21 ,NULL); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,4 ,1 ,21 ,25026.45); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,5 ,1 ,21 ,17212.66); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,6 ,1 ,21 ,15564.26); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,7 ,2 ,21 ,62654.82); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,8 ,2 ,21 ,26434.82); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,9 ,2 ,21 ,15644.65); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,10 ,2 ,21 ,21264.19); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,11 ,1 ,21 ,13026.73); 1 row created. SQL> insert into all_sales (YEAR,MONTH,PRD_TYPE_ID,EMP_ID,AMOUNT) 2 values(2005,12 ,1 ,21 ,10032.64); 1 row created. SQL> SQL> select * from all_sales; YEAR MONTH PRD_TYPE_ID EMP_ID AMOUNT ---------- ---------- ----------- ---------- ---------- 2006 1 1 21 16034.84 2006 2 1 21 15644.65 2006 3 2 21 20167.83 2006 4 2 21 25056.45 2006 5 2 21 2006 6 1 21 15564.66 2006 7 1 21 15644.65 2006 8 1 21 16434.82 2006 9 1 21 19654.57 2006 10 1 21 21764.19 2006 11 1 21 13026.73 2006 12 2 21 10034.64 2005 1 2 22 16634.84 2005 1 2 21 26034.84 2005 2 1 21 12644.65 2005 3 1 21 2005 4 1 21 25026.45 2005 5 1 21 17212.66 2005 6 1 21 15564.26 2005 7 2 21 62654.82 2005 8 2 21 26434.82 2005 9 2 21 15644.65 2005 10 2 21 21264.19 2005 11 1 21 13026.73 2005 12 1 21 10032.64 25 rows selected. SQL> SQL> SQL> --The query divides the current months sales amount by the previous months sales amount SQL> SQL> SELECT 2 month, SUM(amount) AS month_amount, 3 SUM(amount)/FIRST_VALUE(SUM(amount)) OVER 4 (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) 5 AS curr_div_prev, 6 SUM(amount)/LAST_VALUE(SUM(amount)) OVER 7 (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) 8 AS curr_div_next 9 FROM all_sales 10 GROUP BY month 11 ORDER BY month; MONTH MONTH_AMOUNT CURR_DIV_PREV CURR_DIV_NEXT ---------- ------------ ------------- ------------- 1 58704.52 1 2.07514926 2 28289.3 .481893047 1.40269429 3 20167.83 .712913716 .402688942 4 50082.9 2.48330633 2.90965487 5 17212.66 .343683373 .552947548 6 31128.92 1.8084898 .397562333 7 78299.47 2.51532883 1.82645504 8 42869.64 .547508687 1.21446423 9 35299.22 .823408361 .820370648 10 43028.38 1.21896121 1.65154187 11 26053.46 .605494792 1.2983055 12 20067.28 .77023474 1 12 rows selected. SQL> SQL> SQL> drop table all_sales; Table dropped. SQL> SQL>