mysql - 时间重叠总和

标签 mysql datetime select view procedure

我有一个结构如下的表:

id_task INTEGER,
task_begin DATETIME,
task_end DATETIME

我有这样的行:

id_task     task_begin              task_end
1           2015-03-23 09:00:00     2015-03-23 09:14:00
2           2015-03-23 09:10:00     2015-03-23 09:16:00
3           2015-03-23 09:18:00     2015-03-23 09:24:00
4           2015-03-23 09:21:00     2015-03-23 09:23:00
5           2015-03-23 09:24:00     2015-03-23 09:26:00
6           2015-03-23 09:26:00     2015-03-23 09:45:00
7           2015-03-23 09:30:00     2015-03-23 09:36:00
8           2015-03-23 09:34:00     2015-03-23 09:39:00
9           2015-03-23 09:05:00     null
10          null                    null
11          2015-03-23 10:02:00     2015-03-23 10:14:00
12          2015-03-23 10:04:00     2015-03-23 10:10:00
13          2015-03-23 10:03:00     2015-03-23 10:13:00
14          2015-03-23 10:10:00     null
15          2015-03-23 10:20:00     2015-03-23 10:30:00
16          2015-03-23 10:40:00     2015-03-23 10:50:00

我想选择不重叠的实际工作时间。结果将是这样的:

task_begin              task_end
2015-03-23 09:00:00     2015-03-23 09:16:00
2015-03-23 09:18:00     2015-03-23 09:45:00 
2015-03-23 10:02:00     2015-03-23 10:14:00
2015-03-23 10:20:00     2015-03-23 10:30:00
2015-03-23 10:40:00     2015-03-23 10:50:00

如何在 MySQL 中使用 SELECT 或 Procedure 来实现?

最佳答案

SELECT MIN(task_begin) AS task_begin, MAX(task_end) AS task_end
FROM (

    SELECT
    t.*,
    @rc := IF(@prev_task_end >= task_begin, @rc, @rc + 1) AS rc,
    @prev_task_end := task_end
    FROM
    t,
    (SELECT @rc := 0, @prev_task_end := null) var_init_subquery
    ORDER BY id_task

) sq
GROUP BY rc
HAVING task_begin IS NOT NULL OR task_end IS NOT NULL
  • 看到它在 sqlfiddle 中实时运行
  • here您可以阅读有关在查询中使用变量的更多信息

关于mysql - 时间重叠总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29211172/

相关文章:

ruby - 在 ruby​​ 的 strftime 中,为什么 %P 是 "am/pm"而 %p 是 "AM/PM"

r - 更高效地使用 fasttime

jquery - 用jquery模拟鼠标点击选择选项

mysql - 删除重复号码状态存在吗?

mysql - sql 查询来检查许多兴趣是否匹配

mysql - 如何按特定顺序列出mysql查询结果?

php - 如果使用左连接的表中不存在数据,如何将记录显示为空

java - 查找给定日期是星期几

php - MySQL查询优化

jquery 选择带有 youtube embed src 的 iframe