Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

sql групирайте само по редове, които са в последователност

Това е известно като проблемът с "островите". Използвайки подхода на Ицик Бен Ган:

;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. Каква е разликата между VARCHAR и NVARCHAR в SQL сървър - SQL Server / T-SQL урок, част 32

  2. Как да деактивирате ограничение CHECK в SQL Server (примери за T-SQL)

  3. Представяне на DateTime в милисекунди?

  4. Нулева застой на SQL по дизайн - някакви модели на кодиране?

  5. Копирайте таблицата в друга база данни на различен SQL Server