日期:2014-05-16  浏览次数:20484 次

求SQL写法 :期间范围判断重复范围 递增,连续范围叠加


有这样一个表
CD1 | CD2 |  startweek | endweek 
CD1 和 CD2 是主键 

根据CD1 进行分组判断  
 startweek endweek
 列如第一条数据 
 CD1 | CD2 |  startweek | endweek 
 1   | 1   |  201401    | 201405
 首先 插入目标表中
 CD1 | CD2 | Index |  startweek | endweek 
 1   | 1   | 1     |  201401    |201405
 
 对于 CD1 来说, 第一条插入目标表中 Index  默认是 1
 
 如果 第二条数据 

 CD1 | CD2 |  startweek | endweek 
 1   | 2   |  201402    | 201403
 
开始周 与 结束周  有重复期间的话。
插入目标表中 Index 需要加 1
 CD1 | CD2 | Index |  startweek | endweek 
 1   | 2   | 2     |  201402    |201403


如果 第二条数据期间不重复的话。
 CD1 | CD2 |  startweek | endweek 
 1   | 2   |  201406    | 201408
 还是 按照 跟一条 的 Index 一样 插入
 CD1 | CD2 | Index |  startweek | endweek 
 1   | 2   | 1     |  201406    |201408



之后的数据以此类推, 与之前相同 CD1 不重复期间的话,Index 不变。
有重复期间的话, Index 继续加1

下面是个列子


测试数据:
table1:
 CD1 | CD2 |  startweek | endweek 
      
 select 1 CD1,1 CD2,201401 startweek, 201403 endweek
 into #week
 union all
 select 1 CD1,2 CD2,201402 startweek, 201405 endweek
 union all
 select 1 CD1,3 CD2,201404 startweek, 201405 endweek
 union all
 select 1 CD1,4 CD2,201406 startweek, 201407 endweek
 union all
 select 1 CD1,5 CD2,201408 startweek, 201409 endweek
 union all
 select 2 CD1,1 CD2,201401 startweek, 201403 endweek
 union all
 select 2 CD1,2 CD2,201402 startweek, 201405 endweek
 union all
 select 2 CD1,3 CD2,201404 startweek, 201405 endweek
 union all
 select 2 CD1,4 CD2,201406 startweek, 201407 endweek
 union all
 select 2 CD1,5 CD2,201408 startweek, 201409 endweek




结果
table2:
CD1 | CD2 | Index |  startweek | endweek 
1   | 1   | 1     |  201401    | 201403
1   | 2   | 2     |  201402    | 201405
1 &nb