sql >> Databasteknik >  >> RDS >> Sqlserver

sql gruppera endast efter rader som är i sekvens

Detta är känt som "öarna"-problemet. Att använda Itzik Ben Gans tillvägagångssätt:

;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. Välj den senaste raden för varje grupp från oracle

  2. Hur använder man nyckelordet "som" för att alias en tabell i Oracle?

  3. Skicka flera uppsättningar eller matriser av värden till en funktion

  4. Jag vill hämta data från olika tabellnamn med postgresql-funktionen