sql >> データベース >  >> RDS >> Sqlserver

タイムスパンを使用して、同じ値の連続する行をグループ化します

    SQLServer 2012以降を使用している場合は、LAGを使用できます。 列の前の値を取得するには、SUM() OVER (ORDER BY ...) ローリングサム(この場合はCourseNameの変更をカウントするもの)を作成します。これは、GROUP BYとして使用できます。 アンカー

    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
    

    SQLFiddleデモ



    1. MySQL GROUP&COUNT複数のテーブル

    2. (ローカルホストではなく)リモートコンピューターからMySQLにアクセスする方法は?

    3. mysqlに対応する結果がない場合でもカウントを取得するにはどうすればよいですか?

    4. MySQL8.0で監視するもの