Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tanggal bersebelahan SQL Server - meringkas beberapa baris menjadi baris tanggal mulai dan akhir yang berdekatan tanpa CTE, loop, ...

Anda dapat memanfaatkan keduanya fungsi jendela dan penggunaan konsep yang disebut gaps-and-islands . Dalam kasus Anda, tanggal yang berdekatan akan menjadi pulau, dan celahnya cukup jelas.

Saya menulis jawaban di bawah ini dengan cara verbose untuk membantu memperjelas apa yang dilakukan kueri, tetapi kemungkinan besar bisa ditulis dengan cara berbeda yang lebih ringkas. Silakan lihat komentar saya di jawaban yang menjelaskan apa yang dilakukan setiap langkah (sub-kueri).

--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. Bagaimana sp_describe_first_result_set Bekerja di SQL Server

  2. sql server - periksa untuk melihat apakah cast dimungkinkan

  3. PILIH dinamis TOP @var Di SQL Server

  4. Cara Mendapatkan Nilai yang Tidak Mengandung Angka di SQL Server

  5. Ubah format tanggal default yang disimpan dalam database