MySQL的:一个连续的时间跨度的时间内提供(MySQL: a timespan available

2019-10-21 16:36发布

我有一个连续的时间和日期的议程表。

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

正如你可以在15年5月2日看到从19:00至19:40的时间是连续的

正如你可以在15年6月2日看到从19:00至19:15的时间是连续的

正如你可以在15年6月2日看到19:25至19:40的时间是连续的

的开始时间和结束时间总是有5分钟的差别。

我想将所有的日期,即有一个连续的时间跨度x分钟。 因此,当x = 30 ,则结果为:

05-02-15

x = 10 ,则结果为:

05-02-15
06-02-15

思路的方法

也许第一步是把所有的连续的部分,其次计算一个部分的记录的数量(当x = 30,我们需要至少30分钟。/ 5分钟。= 6)。

Answer 1:

此查询检查,如果你有@x/5的下一个空闲插槽@x分钟。 如果是这样,不是将它们覆盖整个@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



Answer 2:

用户变量是在MySQL中是非常有用的

SELECT date,MIN(CASE WHEN BEGIN!='00:00:00' THEN BEGIN END) m,
            MAX(CASE WHEN END!='00:00:00' THEN END END) mm
FROM
  ( SELECT BEGIN,END,date, CASE
                               WHEN
                           END = BEGIN +INTERVAL 5 MINUTE THEN @n ELSE @n:=@n+1 END AS g
   FROM agenda_specialists,
     (SELECT @n:=0) x
   ORDER BY id) s
GROUP BY date, g
HAVING ((TIME_TO_SEC(mm) - TIME_TO_SEC(m))/60)>=40

Esentially要检查是否开始与结束±5分钟等于如果不是你增加一个变量,你可以GROUP BY,它创建的间隔除了不同date.The其余easy.I不得不改变排序规则,对于一些原因,它给了我collat​​ion.Just的非法混合,并在最后的数字游戏。

小提琴

编辑:

SHOW VARIABLES LIKE '%char%';

你可能有character_set_server='latin1'

进入您的配置文件,my.cnf中添加或取消注释这些行:

character-set-server = utf8
collation-server = utf8_general_ci

经测试我的机器5.5



文章来源: MySQL: a timespan available within consecutive times