我有以下问题。我有一个有开始日期和结束日期的 mysql 表。在这些日期之间,每一行都被视为活跃。有些行不再处于事件状态,但过去一直处于事件状态。例如下表:
id start end
1 2014-11-11 00:00:00 2015-01-31 23:59:59
2 2014-09-25 10:16:14 2015-06-01 23:59:59
3 2013-12-24 00:00:00 2014-12-01 23:59:59
4 2014-08-13 00:00:00 2016-01-31 23:59:59
5 2013-09-11 00:00:00 2014-09-10 23:59:59
我的实际表中的数据远不止于此。现在我需要知道并发事件行的峰值数量是多少,但不知道该峰值实际发生的时间。我将如何在 SQL 中执行此操作?在示例中,在 2014-11-11 和 2015-01-31 23:59:59 之间的时间内,有 4 行同时处于事件状态(1-4,而不是 5)。实际的高峰时间对我来说并不像高峰量本身那么重要。
谢谢你的帮助
最佳答案
使用 UNION ALL 查找不同的兴趣时间戳,计算这些时间戳处的事件任务数:
select ts, (select count(*) from tablename t2
where timestamps.ts between t2.start and t2.end) as count
from (select start as ts
from tablename
union all
select end
from tablename) as timestamps
order by count desc
limit 1
最后按降序排列并只选择最高值!
(来自非 MySQL 用户,因此某些细节可能有误...如果是这样请发表评论,我会进行编辑!)
关于mysql - 从所有时间获取事件行的峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28836900/