SQL Query在DateRange上的连接日期范围,它们重叠

时间:2014-07-14 23:14:34

标签: sql date join

我有表A:

UID_Panel   StartDate                   EndDate                     Available
3173        2014-07-14 00:00:00.000 2014-07-20 23:59:59.993     NULL
3173        2014-07-21 00:00:00.000 2014-07-27 23:59:59.993     NULL
3173        2014-07-28 00:00:00.000 2014-08-03 23:59:59.993     NULL  

和表B:

uid_panel   dte_down_from               dte_Down_To
3173            2014-07-21 00:00:00.000     2014-07-31 00:00:00.000

我需要进行加入,并使用Available标记后两个记录“No列。表A中将始终存在mon-sun,而日期可以是任意随机日期范围。如果startDateEndDate与下限重叠,则需要将其标记为No

1 个答案:

答案 0 :(得分:0)

目前还不清楚您是想要update还是select。这是select版本:

select a.*,
       (case when exists (select 1
                          from tableb b
                          where b.dte_down_from <= a.EndDate and
                                b.dte_down_to >= a.StartDate
                         )
             then 'No'
        end) as Available
from tableA a;

请注意,这会使用exists语句中的case子句而不是join。两个停机时段可能会与一周重叠,此配方可确保行不会被join意外地乘以。

此外,它使用标准SQL。您没有指定数据库,但这应该适用于它。