sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2008 R2 - öar och luckor

Något sådant här borde göra jobbet SQL Fiddle

Den hittar öar med sekventiell data med samma värde för SIGN och allokerar dem samma grupperingsvärde med Itzik Ben Gans radnummerteknik och grupperar dem sedan och aggregerar dem. CROSS APPLY ... VALUES kopplar upp MIN och MAX

;WITH T1
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY SIGN(PctGain) 
                                       ORDER BY WSeqKey) - WSeqKey AS Grp
         FROM   YourTable),
     T2
     AS (SELECT MIN(WSeqKey)  AS BeginSeq,
                MAX(WSeqKey)  AS EndSeq,
                SIGN(PctGain) AS Sign
         FROM   T1
         GROUP  BY Grp,
                   SIGN(PctGain))
SELECT CASE Sign
         WHEN -1 THEN 'Negative'
         WHEN 0 THEN 'Equal'
         WHEN 1 THEN 'Positive'
       END AS [Sign],
       Descriptor,
       SeqKey
FROM   T2
       CROSS APPLY (VALUES('Begin', BeginSeq),
                          ('End',   EndSeq)) V(Descriptor, SeqKey)
ORDER  BY SeqKey 


  1. Hur kan jag testa mitt PHP MySQL-injektionsexempel?

  2. multipla selectInput-värden skapar oväntat dplyr (postgres) beteende

  3. MySQL lägger till streck till UUID i en tabell

  4. Säkerhetskopiera vyer med Mysql Dump