Php MySQL包含两个日期字段的日期范围中大于x的字段总和

Php MySQL包含两个日期字段的日期范围中大于x的字段总和,php,mysql,sql,date,yii,Php,Mysql,Sql,Date,Yii,我已经搜索stackoverflow有一段时间了,但是找不到解决我问题的方法 我需要检查一个包含两个日期字段的事件表中所有参与者的总和是否大于X。到目前为止没有问题,但问题来了。我需要在5分钟的时间间隔内获得参与者的最大总数 我的客户需要知道在给定日期范围内的任何时间点,他家里的人数是否超过允许人数 活动表: id start_date end_date participants 1 2014-03-12 10:00:00 2014-03-12

我已经搜索stackoverflow有一段时间了,但是找不到解决我问题的方法

我需要检查一个包含两个日期字段的事件表中所有参与者的总和是否大于X。到目前为止没有问题,但问题来了。我需要在5分钟的时间间隔内获得参与者的最大总数

我的客户需要知道在给定日期范围内的任何时间点,他家里的人数是否超过允许人数

活动表:

id  start_date           end_date             participants
1   2014-03-12 10:00:00  2014-03-12 20:00:00  10
2   2014-03-01 12:30:00  2014-03-14 21:53:00  43
3   2014-02-12 10:00:00  2014-03-13 20:00:00  21
4   2014-05-30 10:00:00  2014-05-30 20:00:00  54
...
到目前为止,我发现的是针对单个日期字段的解决方案,但我有两个:

现在我只能想到一个php循环来查询这个问题,但我不认为在一个日期范围内进行数千次迭代会非常明智。我还可以想到MySQL FOR循环,但我不知道如何在日期范围内实现这一点

有人知道这个问题的解决办法吗?MySQL甚至可以做到这一点吗

提前谢谢

编辑:

可能的伪查询如下所示:

DATE_END = 2014-03-31 20:00:00 
DATE_START = 2014-03-01 10:00:00

WHILE (DATE_START < DATE_END) {
  SELECT SUM(participants) 
  FROM events WHERE start_date <= DATE_START + 5 minutes
  AND end_date >= DATE_START

  IF (participants > MAX_PARTICIPANTS) {
    MAX_PARTICIPANTS = participants
  }

  DATE_START + 5 minutes;
}

这是一个用于递归查询的经典应用程序,不幸的是,MySQL不支持递归查询


作为替代,您需要做的是开发从表中找到的最早时间到最晚时间的时间戳序列。用一个过程或者用另一种调用MySQL的语言编写的代码来实现这一点。然后,将您的表加入其中并找到最大值将是一件简单的事情。

您能给出您希望从数据中得到的示例结果吗?更清楚地定义你所说的五分钟间隔是什么意思?(你在一个固定的5分钟区块中砍了一个小时,或者是连续的5分钟,比如<代码> 21:48∶36到21:53:36<代码>?),你认为有多少与会者可以从<代码> 2014-03-1421:50: > <代码> 2014-03-1421:55:< /代码>?(您的数据有43名参与者参与3分钟,0名参与者参与2分钟。)感谢您的回答。我在我的问题中添加了一个“查询”示例。“10”在12日参与。"21"将于11日停止参与。那么如何得到“74”?您还没有定义“日期范围内每5分钟”。你是说“00:00-00:05”然后“00:05-00:10”等等?或者你是说“00:00-00:05”然后“00:01-00:06”等等?或者也许是相同的,但一秒一秒?如果一个5分钟的周期有43个参与者持续3分钟,0个参与者持续2分钟,那么这5分钟的周期的结果是什么?对不起,我将查询更改为一些伪代码循环。我希望这能让事情澄清一点。谢谢,我到目前为止还没有使用MySQL过程,但我会尝试一下。我现在用这个过程来生成一个时间戳列表:效果很好。以防其他人面临这个问题。
Maximum simultaneous participants: 74