我有三张桌子:
我创建了一个sql脚本,如果第二个表中的一行在给定类别的第一个表中定义的时间段内(其中table1.ID = table2.ID和table1.category = table2.category),则返回1
我现在要做的是创建一个SQL脚本,检查第二个表中的行是否在给定类别和id的第一个表中定义的时间段内,或者是否在ID1_StartDate定义的时间段内和ID2_EndDate(其中ID1和ID2是连续的,意味着它们具有相同的类别,如果我们按日期升序排序,则此类别id2在id1之后)如果table3中存在这两种类别的关系。
答案 0 :(得分:2)
如果满足以下任一条件,则以下查询将返回table1 ID:
1)表1描述的日期范围与table2中的日期范围完全相交
2)表1描述的日期范围与以table2中一行的开始日期开始并以table2中具有相同类别的下一个时间顺序行的enddate结束的日期范围相交。
select distinct table1.id
from table1
inner join (select id,
category,
startdate,
enddate,
lead(enddate)
over (partition by category
order by enddate) as next_enddate
from table2)
on (table1.startdate < table2.enddate
or table1.startdate < table2.next_enddate)
and table1.enddate >= table2.startdate
and table1.ID = table2.ID
and table1.category = table2.category
我不完全理解在这种情况下使用第三个表,所以暂时忽略它。希望这仍然可以让您更接近您正在寻找的答案。