MySQL具有两个日期字段的日期范围内高于x的字段的总和

时间:2014-03-28 09:54:08

标签: php mysql sql date yii

DI已经搜索了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-Loop,但我不知道如何在日期范围内这样做。

有人知道这个问题的解决方案吗?这对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;
}

结果应该是:

Maximum simultaneous participants: 74

1 个答案:

答案 0 :(得分:0)

这是递归查询的经典应用程序,遗憾的是MySQL并不支持这种应用程序。

除此之外,您需要做的是从表格中最早到最晚的时间开发一系列时间戳。使用过程或使用另一种调用MySQL语言的代码执行此操作。然后,将表格加入并找到最大值将是一件简单的事情。