Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server 2008 R2 - Quần đảo và khoảng cách

Một cái gì đó như thế này sẽ thực hiện công việc SQL Fiddle

Nó tìm các đảo dữ liệu tuần tự có cùng giá trị cho SIGN và phân bổ chúng cùng một giá trị nhóm bằng cách sử dụng kỹ thuật số hàng của Itzik Ben Gan, sau đó nhóm chúng lại và tổng hợp chúng. CROSS APPLY ... VALUES bỏ chia nhỏ MINMAX

;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. Công cụ miễn phí để so sánh hai Cơ sở dữ liệu SQL Server là gì?

  2. Kích thước bảng và chỉ mục trong SQL Server

  3. Try_Convert dành cho SQL Server 2008 R2

  4. LINQ2SQL - Kết nối chéo được phát ra khi tôi muốn tham gia bên trong

  5. Truy vấn SQL - Xóa các bản sao nếu nhiều hơn 3 lỗi?