有一张表projects(task_id, start_date,end_date),每条记录end_date与start_date的日期相差一天,对于日期连续的作为是同一个工程,问共有几个工程,其开始时间和结束时间是多少
要求输出:
1、按工期时间升序,如果相同,按开始时间
思路:
1、先查出开始时间不在结束时间、结束时间不在开始时间内的数据集
2、两个集合作笛卡尔积,以起始时间作分组
sql语句如下:
select start_date, min(end_date) from
(select start_date from projects where start_date not in (select end_date from projects)) a,
(select end_date from projects where end_date not in (select start_date from projects)) b
where start_date < end_date
group by start_date
order by datediff(min(end_date), start_date) asc, start_date;