mysql - 从所有时间获取事件行的峰值

标签 mysql sql database

我有以下问题。我有一个有开始日期和结束日期的 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/

相关文章:

mysql - 计算字段的总和

c++ - QSqlQuery 与索引一起使用

php - 如何从 SQL View 中进行 SELECT? (一般错误: 1615 Prepared statement needs to be re-prepared)

sql - 确定框之间的距离

php - 使用 MySQL + PHP 更新多个变量

php - 如何区分 SELECT 查询中的大写或小写单词

MySQL 子查询语法 + ZF2 语法

mysql - 如何在一个mysql docker容器中启动多个实例

sql - 从表中删除所有数据的最佳方法是什么?

php - 从数据库打印多个结果