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

SQL Server 2008 R2 – ostrovy a mezery

Něco takového by mělo fungovat SQL Fiddle

Najde ostrůvky sekvenčních dat se stejnou hodnotou pro SIGN a přidělí jim stejnou seskupovací hodnotu pomocí techniky čísel řádků Itzika Ben Gana, poté je seskupí a agreguje. CROSS APPLY ... VALUES zruší otočení MIN a 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. rekurzivní funkce pro získání všech podřízených kategorií

  2. Převeďte razítko MySql DateTime do formátu Datum v JavaScriptu

  3. SQLAlchemy - SQLite pro testování a Postgresql pro vývoj - Jak portovat?

  4. Nelegální pokus o mapování jiné sbírky jako @OneToMany, @ManyToMany nebo @CollectionOfElements