我有以下表格结构(当然减少了):
CREATE TABLE `log` (
`ID` int(11) unsigned NOT NULL auto_increment,
`StartTime` datetime default NULL,
`FinishTime` datetime default NULL,
PRIMARY KEY (`ID`),
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
一些示例数据:
StartTime FinishTime
2011-06-02 18:00:00 2011-06-02 22:59:59
2011-06-02 23:00:00 2011-06-03 04:00:00
2011-06-03 10:00:00 2011-06-03 12:00:00
是否可以使用Mysql来计算2011-06-03 考虑第二行的总时间,该行从昨天开始但到今天结束?
我当前的查询:
SELECT SUM(UNIX_TIMESTAMP(FinishTime) - UNIX_TIMESTAMP(StartTime)) AS seconds
FROM log WHERE StartTime >= '2011-06-03 00:00:00' AND FinishTime <= '2011-06-03 23:59:59'
由于StartTime条件,这将删除第二条记录。
如何才能获得今天使用的总共6小时? (第二行+第三行,昨天记录的第二行除外)。
谢谢!
答案 0 :(得分:1)
您可以执行的操作是查找包含目标日期的部分或全部的开始/结束时间,但是将时间“裁剪”到当天的限制。例如:
SELECT SUM(
UNIX_TIMESTAMP(
CASE WHEN FinishTime > '2011-06-03 23:59:59' THEN '2011-06-03 23:59:59'
ELSE FinishTime END
) -
UNIX_TIMESTAMP(
CASE WHEN StartTime < '2011-06-03 00:00:00' THEN '2011-06-03 00:00:00'
ELSE StartTime END
)
) AS seconds
FROM log
WHERE FinishTime >= '2011-06-03 00:00:00' AND StartTime <= '2011-06-03 23:59:59'
AND FinishTime > StartTime
N.B。:注意最后的额外标准,那里。您希望所有记录在目标日之内或之后完成,以及在目标日之前或之内开始的所有记录,但由于可能存在重叠,您还需要指定StartTime在FinishTime之前到来!