sql >> Database teknologi >  >> RDS >> Sqlserver

Gruppér data ved at ændre grupperingskolonnens værdi i rækkefølge

Der er en (mere eller mindre) kendt teknik til at løse denne form for problemer, der involverer to ROW_NUMBER() opkald som dette:

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)
 

Output:

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. Hvordan kontrollerer jeg, om værdien allerede findes i tabellen?

  2. Oprettelse af et rumligt indeks på oracle

  3. Mysql inkonsekvent antal rækker count(*) vs table.table_rows i informationsskema

  4. Brug af brugerdefineret konverter til JOOQ's DSL.val()