q51.sql 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. WITH web_v1 AS (
  2. SELECT
  3. ws_item_sk item_sk,
  4. d_date,
  5. sum(sum(ws_sales_price))
  6. OVER (PARTITION BY ws_item_sk
  7. ORDER BY d_date
  8. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) cume_sales
  9. FROM web_sales, date_dim
  10. WHERE ws_sold_date_sk = d_date_sk
  11. AND d_month_seq BETWEEN 1200 AND 1200 + 11
  12. AND ws_item_sk IS NOT NULL
  13. GROUP BY ws_item_sk, d_date),
  14. store_v1 AS (
  15. SELECT
  16. ss_item_sk item_sk,
  17. d_date,
  18. sum(sum(ss_sales_price))
  19. OVER (PARTITION BY ss_item_sk
  20. ORDER BY d_date
  21. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) cume_sales
  22. FROM store_sales, date_dim
  23. WHERE ss_sold_date_sk = d_date_sk
  24. AND d_month_seq BETWEEN 1200 AND 1200 + 11
  25. AND ss_item_sk IS NOT NULL
  26. GROUP BY ss_item_sk, d_date)
  27. SELECT *
  28. FROM (SELECT
  29. item_sk,
  30. d_date,
  31. web_sales,
  32. store_sales,
  33. max(web_sales)
  34. OVER (PARTITION BY item_sk
  35. ORDER BY d_date
  36. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) web_cumulative,
  37. max(store_sales)
  38. OVER (PARTITION BY item_sk
  39. ORDER BY d_date
  40. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) store_cumulative
  41. FROM (SELECT
  42. CASE WHEN web.item_sk IS NOT NULL
  43. THEN web.item_sk
  44. ELSE store.item_sk END item_sk,
  45. CASE WHEN web.d_date IS NOT NULL
  46. THEN web.d_date
  47. ELSE store.d_date END d_date,
  48. web.cume_sales web_sales,
  49. store.cume_sales store_sales
  50. FROM web_v1 web FULL OUTER JOIN store_v1 store ON (web.item_sk = store.item_sk
  51. AND web.d_date = store.d_date)
  52. ) x) y
  53. WHERE web_cumulative > store_cumulative
  54. ORDER BY item_sk, d_date
  55. LIMIT 100