表数据
ID,起始号段,结束号段
1,100,200
1,201,300
1,301,400
1,501,600
2 ,700,720
2,721,770
2,900,990
—
要求统计结果如下(按照ID进行统计,号段ASC,假如ID的结束号段和这个ID的下一个起始号段是连续的,就合并区间;假如是不连续的 就按2行计算)
ID,起始号段,结束号段
1,100,400 (说明:原因是ID=1的第一行200和第二行201是连续的,所以合并,循环。直到发现第三行结束号段400和下一行起始号段501不是连续的,按照两行)
1,501,600
2,700,770
2,900,990
如上这个语句是做报表用的,问一下各位大牛SQL语句怎么汇总出这个结果啊 非常感谢了
ID,起始号段,结束号段
1,100,200
1,201,300
1,301,400
1,501,600
2 ,700,720
2,721,770
2,900,990
—
要求统计结果如下(按照ID进行统计,号段ASC,假如ID的结束号段和这个ID的下一个起始号段是连续的,就合并区间;假如是不连续的 就按2行计算)
ID,起始号段,结束号段
1,100,400 (说明:原因是ID=1的第一行200和第二行201是连续的,所以合并,循环。直到发现第三行结束号段400和下一行起始号段501不是连续的,按照两行)
1,501,600
2,700,770
2,900,990
如上这个语句是做报表用的,问一下各位大牛SQL语句怎么汇总出这个结果啊 非常感谢了
解决方案
57
select a.id, a.起始号段,
(select 结束号段 from 表数据 c where id=a.id and 结束号段>=a.起始号段 and not exists (select 1 from 表数据 where id=c.id and 起始号段=c.结束号段+1))
from 表数据 a
where not exists (select 1 from 表数据 where id=a.id and 结束号段=a.起始号段-1)
(select 结束号段 from 表数据 c where id=a.id and 结束号段>=a.起始号段 and not exists (select 1 from 表数据 where id=c.id and 起始号段=c.结束号段+1))
from 表数据 a
where not exists (select 1 from 表数据 where id=a.id and 结束号段=a.起始号段-1)