我有一个任务的 MYSQL 表,其中每个任务都有一个日期、开始时间、结束时间和 user_id。我想计算特定日期的总小时数。
表结构
CREATE TABLE tasks
(`id` int,`user_id` int, `title` varchar(30), `task_date` datetime, `start` time, `end` time)
;
INSERT INTO tasks
(`id`,`user_id`, `title`,`task_date`, `start`, `end`)
VALUES
(1,10, 'Task one','2013-04-02', '02:00:00', '04:00:00'),
(2,10, 'Task two','2013-04-02', '03:00:00', '06:00:00'),
(3,10, 'Task three.','2013-04-02','06:00:00', '07:00:00');
MYSQL 查询
select TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(TIMEDIFF( end, start)))), "%h:%i") AS diff
FROM tasks
where task_date="2013-04-02"
得到的结果是“06:00”小时,这很好,但我想排除重叠时间。在示例中,我给出的结果应该是“05:00”小时,因为第二条记录中 3-4 之间的小时被排除在外,因为这个小时已经存在于 2-4 之间的第一条记录中。
- 第一条记录 2=>4 = 2 小时
- 第 2 条记录 3=>6 = 3 小时 3-1 小时=2 (1 小时是第 1 条和第 2 条记录之间的重叠时间)
- 第三个 6=>7=1
总共是 5 小时
我希望我把我的问题说清楚了。示例 http://sqlfiddle.com/#!2/05dd8/2