我一直在寻找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
...
到目前为止,我发现的是单个日期字段的解决方案,但我有两个:
- 时间段内分组为5分钟间隔
- SELECT/GROUP BY -时间段(10秒,30秒等)
现在我只能想到一个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
这是一个经典的递归查询应用程序,不幸的是MySQL不支持。
作为替代,您需要做的是开发一个时间戳序列,从表中找到的最早时间到最晚时间。使用调用MySQL的另一种语言的过程或代码来完成此操作。然后,将您的表连接到该表并找到最大值将是一件简单的事情。