-- SQLBench-DS query 51 derived from TPC-DS query 51 under the terms of the TPC Fair Use Policy.
-- TPC-DS queries are Copyright 2021 Transaction Processing Performance Council.
-- This query was generated at scale factor 1.
WITH
  web_v1 as (
    select
      ws_item_sk item_sk,
      d_date,
      sum(sum(ws_sales_price)) over (
        partition by
          ws_item_sk
        order by
          d_date rows between unbounded preceding
          and current row
      ) cume_sales
    from
      web_sales,
      date_dim
    where
      ws_sold_date_sk = d_date_sk
      and d_month_seq between 1215 and 1215  + 11
      and ws_item_sk is not NULL
    group by
      ws_item_sk,
      d_date
  ),
  store_v1 as (
    select
      ss_item_sk item_sk,
      d_date,
      sum(sum(ss_sales_price)) over (
        partition by
          ss_item_sk
        order by
          d_date rows between unbounded preceding
          and current row
      ) cume_sales
    from
      store_sales,
      date_dim
    where
      ss_sold_date_sk = d_date_sk
      and d_month_seq between 1215 and 1215  + 11
      and ss_item_sk is not NULL
    group by
      ss_item_sk,
      d_date
  )
select
  *
from
  (
    select
      item_sk,
      d_date,
      web_sales,
      store_sales,
      max(web_sales) over (
        partition by
          item_sk
        order by
          d_date rows between unbounded preceding
          and current row
      ) web_cumulative,
      max(store_sales) over (
        partition by
          item_sk
        order by
          d_date rows between unbounded preceding
          and current row
      ) store_cumulative
    from
      (
        select
          case
            when web.item_sk is not null then web.item_sk
            else store.item_sk
          end item_sk,
          case
            when web.d_date is not null then web.d_date
            else store.d_date
          end d_date,
          web.cume_sales web_sales,
          store.cume_sales store_sales
        from
          web_v1 web
          full outer join store_v1 store on (
            web.item_sk = store.item_sk
            and web.d_date = store.d_date
          )
      ) x
  ) y
where
  web_cumulative > store_cumulative
order by
  item_sk,
  d_date
LIMIT
  100;
