将表格中的两个时间范围合并为一个时间

时间:2018-06-20 12:15:19

标签: mysql sql database

我的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 

我搜索了很多东西,但没有找到任何答案。请帮助我,让我知道我该怎么做。

1 个答案:

答案 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