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

Hilangkan dan kurangi rentang tanggal yang tumpang tindih

Untuk SQL Server 2005+

-- sample table with data
declare @t table(UserID int, StartDate datetime, EndDate datetime)
insert @t select
1, '20110101', '20110102' union all select
1, '20110101', '20110110' union all select
1, '20110108', '20110215' union all select
1, '20110220', '20110310' union all select
2, '20110101', '20110120' union all select
2, '20110115', '20110125'

-- your query starts below

select UserID, Min(NewStartDate) StartDate, MAX(enddate) EndDate
from
(
    select *,
        NewStartDate = t.startdate+v.number,
        NewStartDateGroup =
            dateadd(d,
                    1- DENSE_RANK() over (partition by UserID order by t.startdate+v.number),
                    t.startdate+v.number)
    from @t t
    inner join master..spt_values v
      on v.type='P' and v.number <= DATEDIFF(d, startdate, EndDate)
) X
group by UserID, NewStartDateGroup
order by UserID, StartDate

Catatan:

  1. Ganti @t dengan nama tabel Anda



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Nama Workstation Saat Ini yang Terhubung ke SQL Server (T-SQL)

  2. Bagaimana mencegah shutdown otomatis SQL Server LocalDB?

  3. Hanya satu ekspresi yang dapat ditentukan dalam daftar pilih ketika subquery tidak diperkenalkan dengan EXISTS

  4. Buffer cache:Apa itu dan bagaimana pengaruhnya terhadap kinerja database?

  5. Konfigurasikan Lucene.Net dengan SQL Server