sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008 R2 - Eilanden en hiaten

Zoiets zou het werk moeten doen SQL Fiddle

Het vindt eilanden van opeenvolgende gegevens met dezelfde waarde voor SIGN en wijst ze dezelfde groeperingswaarde toe met behulp van de rijnummertechniek van Itzik Ben Gan en groepeert ze en aggregeert ze. De CROSS APPLY ... VALUES maakt de draaiing van de MIN . ongedaan en 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. Hoe de rangorde te berekenen uit de mysql-tabel

  2. Tijdstempel invoegen met JdbcTemplate in Oracle-database (ORA-01858)

  3. Hoe kom je achter de URL van de Oracle-database?

  4. Verander databaseresultaat in array