|
本帖最后由 lasharks 于 2014-5-24 20:20 编辑
做的很复杂,有空再优化- select min([start_date]) as [start_date],max([end_date]) as [end_date] from (select a.*,(select min(b.[start_date]) from [date$a1:c11]b where (a.[start_date]>=b.[start_date] and a.[start_date]<=b.[end_date]) or a.[start_date]-1=b.[end_date] ) as tt,(select max(c.[end_date]) from [date$a1:c11]c where (a.[end_date]>=c.[start_date] and a.[end_date]<=c.[end_date]) or a.[end_date]+1=c.[start_date]) as ttt from [date$a1:c11]a)d group by tt,ttt
复制代码 ---------------------------------------------------------------------------------------------------------------------------------------------------
向老师,追加了几个数据源后,发现上面的代码有漏洞,改了一下,如下- select tp1 as [start_date],max(tp2) as [end_date] from (select min(tp1) as tp1,tp2 as tp2 from (select (select min(b.[start_date]) from [date$a:c]b where (a.[start_date]>=b.[start_date] and a.[start_date]<=b.[end_date]) or a.[start_date]-1=b.[end_date] ) as tp1,(select max(c.[end_date]) from [date$a:c]c where (a.[end_date]>=c.[start_date] and a.[end_date]<=c.[end_date]) or a.[end_date]+1=c.[start_date]) as tp2 from [date$a:c]a) group by tp2) group by tp1
复制代码 先用2个内嵌子查询,对日期可能有重叠的日期段,始末日期做调整- select (select min(b.[start_date]) from [date$a:c]b where (a.[start_date]>=b.[start_date] and a.[start_date]<=b.[end_date]) or a.[start_date]-1=b.[end_date] ) as tp1,(select max(c.[end_date]) from [date$a:c]c where (a.[end_date]>=c.[start_date] and a.[end_date]<=c.[end_date]) or a.[end_date]+1=c.[start_date]) as tp2 from [date$a:c]a
复制代码 然后 外面在套2次查询,合并掉相同的始,末日期
---------------------------------------------------------------------------------------------------------------------------------------------------
|
|