sql合并时间段问题解析

发布时间:2019-07-27编辑:脚本学堂
有关slq合并时间段的一些问题,掌握下sql语句中时间段合并的方法,感兴趣的朋友参考下。

有如下表结构:
 

Tsheets 字段名 字段类型 约束
id CHAR(10) PRIMARY KEY start_date
DATE CHECK(start_date<= end_date) end_date DATE

输入为:
 

1,'1997-01-01','1997-01-03'
2,'1997-01-02','1997-01-04'
3,'1997-01-04','1997-01-05'
4,'1997-01-06','1997-01-09'
5,'1997-01-09','1997-01-09'
6,'1997-01-09','1997-01-09'
7,'1997-01-12','1997-01-15'
8,'1997-01-13','1997-01-14'
9,'1997-01-14','1997-01-14'
10,'1997-01-17','1997-01-17'

输出为:
 

start_date  end_date
1997-01-011997-01-05
1997-01-061997-01-09
1997-01-121997-01-15
1997-01-171997-01-17

sql语句,合并时间段:
 

复制代码 代码示例:
selectx.start_date, min(x.end_date) as end_date
from (select t1.start_date,t2.end_date
  from tsheets as t1,tsheets as t2,tsheets as t3 where t1.end_date <= t2.end_date group by t1.start_date,t2.end_date
having max (case
  when (t1.start_date > t3.start_date
and t1.start_date <= t3.end_date)
 or(t2.end_date >= t3.start_date
and t2.end_date < t3.end_date)
then 1 else 0 end) = 0) as x
group by x.start_date