求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