首先提一个关于上述标题的典型需求描述:
车辆有个维修工单表.对于每个工单都会有一个开始时间 start_time 和一个结束时间end_time 并且同一车辆有可能有多张维修工单.并且每个维修工单的维修时间段是有可能有重叠的具体举例如下:
工单号 开始时间 结束时间
- 2012-03-01 2012-04-01
- 2012-02-08 2012-03-15
- 2012- 04-08 2012-04-23
- 2012-04-09 2012-05-08
- 这辆车的所有维修时间 区间是什么? 预期答案: 2012-02-08~2012--2012-04-01 和 2012-04-08~2012-05-08
- 这辆车的总的维修天数是多少 ?
而对第二个问题的答案就是每个合并区间的所有天数相加即可得到总的维修天数了.答案很明显.
而解决第一个问题才是我们问题最主要的难点.因为对于sql来说查找自己的区间不是特别直观而且不是普通的聚合所能