给定一个历史事件列表,每个事件都运行了一定秒数并且有一个非唯一的开始时间,我如何才能“最好地”确定发生最大事件数的时间范围? (在这种情况下,对于“最佳”,数据集存储在 SQL 数据库中,因此我可能正在寻找能够平衡少量查询与向客户端返回小数据集的东西;其中可能有数百个事件审查的时间间隔。)
例如,给定这些事件:
- 事件 1 从 5 点开始,持续 10 点
- 事件 2 从 7 点开始,持续 4 分钟
- 事件 3 9 点开始,持续 2 分钟
大多数事件发生在时间 9-10,同时有 3 个事件发生。
想到的一种方法是遍历事件发生的整个时间间隔,并在每个点评估那里发生了多少事件,然后存储最大值;但肯定必须有一些更有效的方法。
最佳答案
由于“最大值”会在其中一个事件开始时发生,您可以进行自连接以查找当时正在进行的事件数:
SELECT TOP 1 MAX(e1.StartDate), COUNT(e2.eventID) FROM event e1
INNER JOIN event e2
on e1.StartDate BETWEEN e2.StartDate
AND DATEADD(second,e2.Duration,e2.StartDate)
GROUP BY e1.EventID
ORDER BY COUNT(e2.eventID) DESC
关于sql - 如何确定同时发生的事件数量最多的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21532465/