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

順番に並んでいる行のみによるSQLグループ化

    これは「島」問題として知られています。 Itzik Ben Ganのアプローチの使用:

    ;WITH YourTable AS
    (
    SELECT 1 AS N, 'A' AS C UNION ALL
    SELECT 2 AS N, 'A' AS C UNION ALL
    SELECT 3 AS N, 'A' AS C UNION ALL
    SELECT 4 AS N, 'B' AS C UNION ALL
    SELECT 5 AS N, 'B' AS C UNION ALL
    SELECT 6 AS N, 'B' AS C UNION ALL
    SELECT 7 AS N, 'A' AS C UNION ALL
    SELECT 8 AS N, 'A' AS C
    ),
         T
         AS (SELECT N,
                    C,
                    DENSE_RANK() OVER (ORDER BY N) - 
                    DENSE_RANK() OVER (PARTITION BY C ORDER BY N) AS Grp
             FROM   YourTable)
    SELECT COUNT(*),
           C
    FROM   T
    GROUP  BY C,
              Grp 
    ORDER BY MIN(N)
    


    1. SQL Server 2005で大文字と小文字を区別するように変更するにはどうすればよいですか?

    2. Moodleデータベースのスケールアウト

    3. MySQLで照合を見つける方法

    4. Python FlaskとMySQLを使用してゼロからWebアプリを作成する:パート3