MySQL:连续时间内可用的时间跨度

标签 mysql time timespan difference

我有一张表格,其中包含议程的连续时间和日期。

ID  date        begin_time  end_time
1   05-02-15    19:00:00    19:05:00
2   05-02-15    19:05:00    19:10:00
3   05-02-15    19:10:00    19:15:00
4   05-02-15    19:15:00    19:20:00
5   05-02-15    19:20:00    19:25:00
6   05-02-15    19:25:00    19:30:00
7   05-02-15    19:30:00    19:35:00
8   05-02-15    19:35:00    19:40:00
9   06-02-15    19:00:00    19:05:00
10  06-02-15    19:05:00    19:10:00
11  06-02-15    19:10:00    19:15:00
12          
13          
14  06-02-15    19:25:00    19:30:00
15  06-02-15    19:30:00    19:35:00
16  06-02-15    19:35:00    19:40:00

http://sqlfiddle.com/#!2/54d9f6

正如你在 05-02-15 看到的,从 19:00 到 19:40 的时间是连续的

正如您在 06-02-15 上看到的,从 19:00 到 19:15 的时间是连续的

正如您在 06-02-15 上看到的,从 19:25 到 19:40 的时间是连续的

开始时间和结束时间始终相差 5 分钟。

我想要所有具有 x 分钟连续时间跨度的日期。所以当 x = 30 时,结果是:

05-02-15

x = 10时,结果为:

05-02-15
06-02-15

方法的想法

也许第一步是获取所有连续的部分,其次计算部分中的记录数(当 x = 30 时,我们至少需要 30 min./5 min. = 6)。

最佳答案

此查询检查您在接下来的 @x 分钟内是否有 @x/5 个空闲时段。如果是这样,那么它们将覆盖整个 @x 分钟间隔,这意味着它们是连续的。

set @x=15;
select distinct t1.date
from
    `agenda_specialists` as t1 join
    `agenda_specialists` as t2 on
        t2.date=t1.date and
        t2.begin>=t1.begin and
        t2.begin<addtime(t1.begin,sec_to_time(@x*60))
group by t1.id
having count(*)=@x/5

http://sqlfiddle.com/#!2/54d9f6/50

关于MySQL:连续时间内可用的时间跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093982/

相关文章:

PHP从mysql日期时间导出Excel问题

Java - 12 小时到 24 小时格式 (hackerrank)

c# - 无法将 'System.TimeSpan?' 隐式转换为 'System.TimeSpan'

c# - +/- 登录 TimeSpan 的 ParseExact()?

c# - 时间跨度平均值

MYSQL - 使用 GROUP BY 时获取最新结果

php - 循环查询并获得位置数组

mysql - SOLR像mysql一样按field_in_set排序

php - mysql查询检索过去15天每天的记录数

java - 如何使用java8设置工作日