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

Các ngày liền kề của SQL Server - tóm tắt nhiều hàng thành các hàng ngày bắt đầu và ngày kết thúc liền kề mà không có CTE, vòng lặp, ... s

Bạn có thể tận dụng cả chức năng cửa sổ và việc sử dụng khái niệm có tên gaps-and-islands . Trong trường hợp của bạn, các ngày liền kề sẽ là hòn đảo và các khoảng trống là tự giải thích.

Tôi đã viết câu trả lời dưới đây một cách dài dòng để giúp làm rõ ràng truy vấn đang làm gì, nhưng rất có thể nó có thể được viết theo một cách khác ngắn gọn hơn. Vui lòng xem nhận xét của tôi trong câu trả lời giải thích những gì mỗi bước (truy vấn phụ) thực hiện.

--Determine Final output
select min(c.StartDate) as StartDate
, max(c.EndDate) as EndDate
from (
    --Assign a number to each group of Contiguous Records
    select b.ID
    , b.StartDate
    , b.EndDate
    , b.EndDatePrev
    , b.IslandBegin
    , sum(b.IslandBegin) over (order by b.ID asc) as IslandNbr
    from (
        --Determine if its Contiguous (IslandBegin = 1, means its not Contiguous with previous record)
        select a.ID
        , a.StartDate
        , a.EndDate
        , a.EndDatePrev
        , case when a.EndDatePrev is NULL then 1
               when datediff(d, a.EndDatePrev, a.StartDate) > 1 then 1
               else 0
          end as IslandBegin
        from (
            --Determine Prev End Date
            select tt.ID
            , tt.StartDate
            , tt.EndDate
            , lag(tt.EndDate, 1, NULL) over (order by tt.ID asc) as EndDatePrev
            from dbo.Table_Name as tt
            ) as a
        ) as b
    ) as c
group by c.IslandNbr
order by c.IslandNbr


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 - tách trường Địa chỉ

  2. Làm cách nào để viết truy vấn SQL cho một phạm vi ngày và giờ cụ thể bằng cách sử dụng SQL Server 2008?

  3. Bạn có thể có logic if-then-else trong SQL không?

  4. Hệ thống phân cấp công nghệ bộ nhớ / lưu trữ và SQL Server

  5. Sự khác biệt giữa giao dịch ngầm và rõ ràng