Back to home page

OSCL-LXR

 
 

    


0001 WITH v1 AS (
0002   SELECT
0003     i_category,
0004     i_brand,
0005     cc_name,
0006     d_year,
0007     d_moy,
0008     sum(cs_sales_price) sum_sales,
0009     avg(sum(cs_sales_price))
0010     OVER
0011     (PARTITION BY i_category, i_brand, cc_name, d_year)
0012     avg_monthly_sales,
0013     rank()
0014     OVER
0015     (PARTITION BY i_category, i_brand, cc_name
0016       ORDER BY d_year, d_moy) rn
0017   FROM item, catalog_sales, date_dim, call_center
0018   WHERE cs_item_sk = i_item_sk AND
0019     cs_sold_date_sk = d_date_sk AND
0020     cc_call_center_sk = cs_call_center_sk AND
0021     (
0022       d_year = 1999 OR
0023         (d_year = 1999 - 1 AND d_moy = 12) OR
0024         (d_year = 1999 + 1 AND d_moy = 1)
0025     )
0026   GROUP BY i_category, i_brand,
0027     cc_name, d_year, d_moy),
0028     v2 AS (
0029     SELECT
0030       v1.i_category,
0031       v1.i_brand,
0032       v1.cc_name,
0033       v1.d_year,
0034       v1.d_moy,
0035       v1.avg_monthly_sales,
0036       v1.sum_sales,
0037       v1_lag.sum_sales psum,
0038       v1_lead.sum_sales nsum
0039     FROM v1, v1 v1_lag, v1 v1_lead
0040     WHERE v1.i_category = v1_lag.i_category AND
0041       v1.i_category = v1_lead.i_category AND
0042       v1.i_brand = v1_lag.i_brand AND
0043       v1.i_brand = v1_lead.i_brand AND
0044       v1.cc_name = v1_lag.cc_name AND
0045       v1.cc_name = v1_lead.cc_name AND
0046       v1.rn = v1_lag.rn + 1 AND
0047       v1.rn = v1_lead.rn - 1)
0048 SELECT *
0049 FROM v2
0050 WHERE d_year = 1999 AND
0051   avg_monthly_sales > 0 AND
0052   CASE WHEN avg_monthly_sales > 0
0053     THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales
0054   ELSE NULL END > 0.1
0055 ORDER BY sum_sales - avg_monthly_sales, 3
0056 LIMIT 100