Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2008 R2 — wyspy i luki

Coś takiego powinno wystarczyć SQL Fiddle

Znajduje wyspy danych sekwencyjnych o tej samej wartości dla SIGN i przydziela im tę samą wartość grupowania przy użyciu techniki numerowania wierszy Itzika Ben Gana, a następnie grupuje je i agreguje. CROSS APPLY ... VALUES odwraca MIN i 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. znajdź brakujące wpisy dla dni roboczych i wypełnij wiersz wartościami z najbliższej daty

  2. Używanie SQL Server Integration Services (SSIS) do wypełniania rekordów QuickBooks

  3. Jak znaleźć najgorzej działające zapytania w SQL Server 2008?

  4. com.microsoft.sqlserver.jdbc.SQLServerException:połączenie TCP/IP z hostem lokalnym, port 1433 nie powiodło się

  5. Ograniczenie wielokrotności naruszyło SQL Server 2008 - CodeFirst