我有一个事件表,每个事件都有一个开始时间和结束时间(类型为DateTime)在MySQL表中。
我想输出重叠时间的总和以及重叠的事件数量。
在MySQL中执行此查询的最有效/简单的方法是什么?
CREATE TABLE IF NOT EXISTS `events` (
`EventID` int(10) unsigned NOT NULL auto_increment,
`StartTime` datetime NOT NULL,
`EndTime` datetime default NULL,
PRIMARY KEY (`EventID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=37 ;
INSERT INTO `events` (`EventID`, `StartTime`, `EndTime`) VALUES
(10001, '2009-02-09 03:00:00', '2009-02-09 10:00:00'),
(10002, '2009-02-09 05:00:00', '2009-02-09 09:00:00'),
(10003, '2009-02-09 07:00:00', '2009-02-09 09:00:00');
# if the query was run using the data above,
# the table below would be the desired output
# Number of Overlapped Events | Total Amount of Time those events overlapped.
1, 03:00:00
2, 02:00:00
3, 02:00:00
这些结果的目的是生成使用小时数的账单。(如果您只有一个事件在运行,您可能会支付每小时10美元。但如果有两个事件在运行,您只需要支付每小时8美元,但仅限于您有两个事件运行的时间段。)