こんな感じでどうでしょう
SQL
1create table yoyaku_tbl(
2revdat date,
3revstart time,
4revend time,
5tanto varchar(20));
6
7insert into yoyaku_tbl values
8('2018-11-01','10:00:00','10:30:00','Aさん'),
9('2018-11-01','10:00:00','11:00:00','Bさん'),
10('2018-11-01','14:00:00','15:30:00','Bさん'),
11('2018-11-01','11:00:00','12:45:00','Aさん'),
12('2018-11-01','14:30:00','15:45:00','Aさん'),
13('2018-11-02','10:00:00','10:00:00','Aさん'),
14('2018-11-02','10:00:00','10:00:00','Bさん');
ランク付けをする
SQL
1select revstart,revend,(select count(*)+1 from yoyaku_tbl where revdat=t1.revdat and tanto=t1.tanto and revstart<t1.revstart) as rank
2from yoyaku_tbl as t1
3where revdat='2018-11-01' and tanto='Aさん'
revstart | revend | rank |
---|
10:00:00 | 10:30:00 | 1 |
11:00:00 | 12:45:00 | 2 |
14:30:00 | 15:45:00 | 3 |
- ランク付けされたテーブル通しを1ずらしてjoinする
ついでに9:00からと18:00までを追加する
SQL
1select t2.revend
2,t4.revstart
3,time_to_sec(timediff(t4.revstart,t2.revend))/(60*30) as blank
4from (
5select revstart,revend,(select count(*)+1
6from yoyaku_tbl
7where revdat=t1.revdat and tanto=t1.tanto and revstart<t1.revstart) as rank
8from yoyaku_tbl as t1
9where revdat='2018-11-01' and tanto='Aさん'
10union all select null,'09:00:00',0
11) as t2
12inner join (
13select revstart,revend,(select count(*)+1
14from yoyaku_tbl
15where revdat=t3.revdat and tanto=t3.tanto and revstart<t3.revstart) as rank
16from yoyaku_tbl as t3
17where revdat='2018-11-01' and tanto='Aさん'
18union all select '18:00:00',null,count(*)+1 from yoyaku_tbl
19where revdat='2018-11-01' and tanto='Aさん'
20) as t4 on t2.rank=t4.rank-1
21