Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

sql grupuj tylko według wierszy, które są w sekwencji

Jest to znane jako problem „wysp”. Stosując podejście Itzika Ben Gana:

;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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opcjonalne argumenty w klauzuli WHERE

  2. Sparametryzowane zapytanie oczekuje parametru, którego nie podano

  3. Funkcje agregujące MIN i MAX w SQL Server

  4. Jak generować skrypty DDL (tworzenie) z SQL Server Management Studio (SSMS) — SQL Server / TSQL Tutorial, część 17

  5. Nie można połączyć się z serwerem — błąd związany z siecią lub specyficzny dla instancji