我有以下问题。我有一个mysql表,它有一个startdate和enddate。在这些日期之间,每行被视为活动。某些行不再处于活动状态,但过去一直处于活动状态。例如下表:
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)。实际的高峰时间对我来说并不像峰值量本身那么重要。
感谢您的帮助
答案 0 :(得分:0)
使用UNION ALL查找不同的interrest时间戳,计算这些时间戳的活动任务数:
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用户,所以有些细节可能有误...如果是这样的话请评论,我会编辑!)