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

Seskupte po sobě jdoucí řádky stejné hodnoty pomocí časových úseků

Pokud používáte SQLServer 2012 nebo lepší, můžete použít LAG chcete-li získat předchozí hodnotu sloupce, pak SUM() OVER (ORDER BY ...) vytvořit klouzavý součet, v tomto případě takový, který počítá změnu názvu hřiště, který lze použít jako GROUP BY kotva

With A AS (
  SELECT ClassRoom
       , CourseName
       , StartTime
       , EndTime
       , PrevCourse = LAG(CourseName, 1, CourseName) OVER (ORDER BY StartTime)
  FROM   Table1
), B AS (
  SELECT ClassRoom
       , CourseName
       , StartTime
       , EndTime
       , Ranker = SUM(CASE WHEN CourseName = PrevCourse THEN 0 ELSE 1 END)
                OVER (ORDER BY StartTime, CourseName)
  FROM   A
)
SELECT ClassRoom
     , CourseName
     , MIN(StartTime) StartTime
     , MAX(EndTime) EndTime
FROM   B
GROUP BY ClassRoom, CourseName, Ranker
ORDER BY StartTime

Ukázka SQLFiddle



  1. phpMyAdmin na MySQL 8.0

  2. Jak zjistím _exact_ chybu ze serveru SQL

  3. Jak udělat SUM ve dvou nesouvisejících tabulkách?

  4. rychlý výběr náhodného řádku z velké tabulky v mysql