sql >> Database >  >> RDS >> Sqlserver

sql groeperen op alleen rijen die op volgorde staan

Dit staat bekend als het "eilanden"-probleem. De aanpak van Itzik Ben Gan gebruiken:

;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. 12c Verouderde functies

  2. Opatch in niet-interactieve vorm uitvoeren

  3. Hoe een Excel-bestand te importeren in een MySQL-database

  4. Hoe kan ik ORA-00911:ongeldige tekenfout oplossen?