Overlapping Date Ranges - Identifying Only the Overlap

后端 未结 3 670
我寻月下人不归
我寻月下人不归 2021-01-27 00:23

I\'ve seen a lot of solutions to identify records where date ranges overlap, and still other examples of merging overlapping ranges.

However I am interested in results

3条回答
  •  甜味超标
    2021-01-27 00:28

    Try:

    select ab.CustomerID, 
           case when ab_Eff_Dt > c.Eff_Dt then ab_Eff_Dt else c.Eff_Dt end abc_Eff_Dt,
           case when ab_End_Dt < c.End_Dt then ab_End_Dt else c.End_Dt end abc_End_Dt
    from
    (select a.CustomerID, 
            case when a.Eff_Dt > b.Eff_Dt then a.Eff_Dt else b.Eff_Dt end ab_Eff_Dt,
            case when a.End_Dt < b.End_Dt then a.End_Dt else b.End_Dt end ab_End_Dt
     from #tmp a
     join #tmp b 
       on a.CustomerID = b.CustomerID and a.Eff_Dt < b.End_Dt and b.Eff_Dt < a.End_Dt
     where a.ProductID = 'PRODUCT_A' and b.ProductID = 'PRODUCT_B') ab
    join #tmp c 
      on ab.CustomerID = c.CustomerID and ab_Eff_Dt < c.End_Dt and c.Eff_Dt < ab_End_Dt
    where c.ProductID = 'PRODUCT_C' 
    

    (SQLFiddle here)

提交回复
热议问题