Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Непрекъснати дати на SQL Server - обобщаване на множество редове в непрекъснати редове с начална и крайна дата без CTE, цикли,...

Можете да се възползвате и от двете прозоречни функции и използването на концепция, наречена gaps-and-islands . Във вашия случай съседните дати ще бъдат островът, а празнините са ясни.

Написах отговора по-долу многословно, за да стане ясно какво прави заявката, но най-вероятно може да бъде написан по различен начин, който е по-сбит. Моля, вижте моите коментари в отговора, обясняващи какво прави всяка стъпка (подзаявка).

--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. Как да проследя броя на промените, настъпили в колона? T-SQL - SQL сървър

  2. Защо една схема би направила XML колона по-бавна?

  3. Плюсове срещу минуси на внедряването на хибридна облачна среда

  4. ИЗБЕРЕТЕ DISTINCT на една колона

  5. Как да се борави с избягване на единични и двойни кавички в израз за SQL-Update