我有一张包含与紧急事件相关的数据的表格。我希望比较有多少事件重叠(按时间)。我知道数据库本质上是无序的,但我有事件的开始(和结束)时间,所以我可以按时间对记录进行排序。
我认为最终结果将是一个包含每条记录和一个额外字段的结果集,该字段指示它是否与任何事件重叠(0 表示没有事件,1 表示一个重叠,2 表示两个重叠......)。从历史上看,重叠的数量是有限的(6 是当前的最大值),但可能会有更多。
目前,我在 Excel 中进行此类分析,使用辅助列将当前记录与以前的记录进行比较,以确定是否存在重叠(或重叠数量)并且工作正常,但似乎我应该能够完成这个严格在 SQL 内。
编辑:这是来自 Excel 的示例,但数据保存在单个 SQL 表中。我拥有数据库的管理员权限,因此我几乎可以实施任何解决方案——除了更改数据库结构(它是一个 COTS 系统)。我已经包含了重叠列的公式。此外,我在 2 个重叠处停止了示例公式,但是当我实现答案时,我会考虑更多。
Incident Start End Overlap Overlap Formula
1 2012-01-01 07:00 2012-01-01 08:00
2 2012-01-02 07:00 2012-01-02 08:00 0 =IF(C2>B3,1,0)
3 2012-01-02 07:30 2012-01-02 08:30 1 =IF(C3>B4,IF(C2>B4,2,1),0)
4 2012-01-03 07:00 2012-01-03 08:00 0 =IF(C4>B5,IF(C3>B5,2,1),0)
5 2012-01-04 07:00 2012-01-04 08:00 0 =IF(C5>B6,IF(C4>B6,2,1),0)
6 2012-01-04 07:30 2012-01-04 08:30 1 =IF(C6>B7,IF(C5>B7,2,1),0)
7 2012-01-04 07:45 2012-01-04 08:45 2 =IF(C7>B8,IF(C6>B8,2,1),0)
8 2012-01-04 08:45 2012-01-04 09:45 0 =IF(C8>B9,IF(C7>B9,2,1),0)
9 2012-01-05 07:00 2012-01-05 08:00 0 =IF(C9>B10,IF(C8>B10,2,1),0)