我的MySQL数据库的可用性表中有两列。说,它具有以下数据。
userid start end date
2 08:00 09:00 2018-06-20
2 09:00 16:00 2018-06-20
2 18:00 21:00 2018-06-20
2 10:00 02:00 2018-06-21
..
..
现在,我需要每天的用户可用性的连续时间范围,以便从8:00到16:00,然后从18:00到21:00。我怎样才能做到这一点?可以在mysql查询本身中完成吗?如果没有,那我该如何在php中做
。最终结果:
userid start end date
2 08:00 16:00 2018-06-20 [Combined two rows]
2 18:00 21:00 2018-06-20
2 10:00 02:00 2018-06-21
我搜索了很多东西,但没有找到任何答案。请帮助我,让我知道我该怎么做。
答案 0 :(得分:2)
这是一种方法:
-- sample data
create table t (
userid integer,
start varchar(5),
end varchar(5),
date date
);
insert into t values
(2, '08:00', '09:00', '2018-06-20'),
(2, '09:00', '16:00', '2018-06-20'),
(2, '18:00', '21:00', '2018-06-20'),
(2, '10:00', '02:00', '2018-06-21');
-- query:
select t1.userid,
min(t1.start) start,
coalesce(t2.end, t1.end) end,
t1.date
from t t1 left join t t2
on t1.userid=t2.userid
and t1.end = t2.start
and t1.date = t2.date
group by t1.userid, coalesce(t2.end, t1.end), t1.date
order by t1.userid, t1.date, start;
看到它在这里工作:http://www.sqlfiddle.com/#!9/674fa/1