sql >> Databáze >  >> RDS >> Sqlserver

Seskupit data podle změny hodnoty sloupce seskupení v pořadí

Existuje (více či méně) známá technika řešení tohoto druhu problému, která zahrnuje dva ROW_NUMBER() volání takto:

WITH marked AS (
  SELECT
    *,
    grp = ROW_NUMBER() OVER (PARTITION BY product        ORDER BY date)
        - ROW_NUMBER() OVER (PARTITION BY product, price ORDER BY date)
  FROM #ph
)
SELECT
  product,
  date_from = MIN(date),
  date_to   = MAX(date),
  price
FROM marked
GROUP BY
  product,
  price,
  grp
ORDER BY
  product,
  MIN(date)

Výstup:

product  date_from   date_to        price 
-------  ----------  -------------  ----- 
1        2012-01-01  2012-01-04     1     
1        2012-01-05  2012-01-08     2     
1        2012-01-09  2012-01-12     1     


  1. Vrácení hodnot z mapovaných metod MyBatis <insert>

  2. Vrácení kurzoru z vnitřní procedury do vnější procedury v oracle pl/sql

  3. Co je MySQL? – Úvod do systémů správy databází

  4. Jaký mysql engine pro velké množství dat (logování)?