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

sql group pouze po řádcích, které jsou za sebou

Toto je známé jako problém „ostrovů“. Použití přístupu 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. MySQL:Kód chyby:1118 Velikost řádku je příliš velká (> 8126). Změna některých sloupců na TEXT nebo BLOB

  2. Existuje typ časového razítka automatické úpravy pro sloupce Oracle?

  3. Uložená procedura nebo funkce očekává parametr, který není zadán

  4. Jak mohu provést požadavek HTTP ze serveru SQL?