sql >> データベース >  >> RDS >> Sqlserver

重複する日付範囲を削除して削減します

    SQLServer2005以降の場合

    -- 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
    

    注:

    1. @tを置き換えます あなたのテーブル名で



    1. SQLServerでデータベースの名前を変更する方法-SQLServer/TSQLチュートリアルパート26

    2. PostgreSQLの日付から週を引く

    3. 従業員はリモートで作業していますか?データを安全に保つ方法は次のとおりです。

    4. 既存のテーブルに外部キーを追加する