选择同时发生的事件

时间:2016-06-17 17:57:35

标签: sql-server tsql

我想要做的是从表格中选择在同一日期,时间和地点发生的所有事件,并输出如下:

Event ID    Event ID in conflict
1           2
1           3
1           4
5           6

因此,如果事件2 startTime在事件1 startTime和endTime之间,它应该出现在列表中。

我在表格中有这些信息:

  • 活动ID(ID)
  • 活动名称(姓名)
  • 开始日期(startDate)
  • 结束日期(endDate)
  • 开始时间(startTime)
  • 结束时间(结束时间)
  • 活动地点ID(locationID)

有关如何在一个SELECT中执行此操作的任何建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用联接获取事件对。要获得任何重叠:

select e.eventid, e2.eventid
from events e join
     events e2
     on e.starttime < e2.endtime and
        e.endtime > e2.starttime and
        e.eventid < e2.eventid;

实际上,您的具体问题不是重叠。所以,针对您的具体问题:

select e.eventid, e2.eventid
from events e join
     events e2
     on e2.starttime between e.starttime and e.endtimee;

但是,我怀疑更一般的重叠逻辑可能适合您的需要。