Mega Code Archive

 
Categories / Oracle PLSQL / Analytical Functions
 

The query divides the current months sales amount by the previous months 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 month’s sales amount by the previous month’s 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>