Group data by the change of grouping column value in order

后端 未结 5 885
一个人的身影
一个人的身影 2020-12-14 03:57

With the following data

create table #ph (product int, [date] date, price int)
insert into #ph select 1, \'20120101\', 1
insert into #ph select 1, \'20120102         


        
5条回答
  •  星月不相逢
    2020-12-14 04:07

    WITH marked AS (
      SELECT
        *,
      case
       when (lag(price,1,'') over (partition by product order by date_from)) = price
       then 0 else 1
      end is_price_change
      FROM #ph
    ),
    marked_as_group AS
    ( SELECT m.*,
           SUM(is_price_change) over (PARTITION BY product order by date_from ROWS 
          BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS price_change_group
      FROM marked m
    ),
    SELECT
      product,
      date_from = MIN(date_from),
      date_to   = MAX(date_to),
      price = MIN(price)
    FROM marked_as_group 
    GROUP BY
      product,
      price_change_group
    ORDER BY
      product,
      date_to
    

提交回复
热议问题