【问题】
如:
xh num1 num2
1 10015 60080
2 20022 80090
3 30250 40900
判断数据重叠区间后最后形成一条记录为:1 10015 80090
xh num1 num2
1 10015 30080
2 20022 50090
3 60250 90900
处理后为:
xh num1 num2
1 10015 50090
2 60250 90900
【回答】
原理是判断是否可以和上一行合并成同一个区间,如果不可以则处理成另一个分组,可以则处理成同一个分组,最后在每组算最小最大端点即可。但SQL本身没有序运算,写成嵌套的方式,也很费劲。用SPL会简单一些,具体脚本如下:
| A | B | |
| 1 | $select num1,num2 from tb order by num1 | |
| 2 | =A1.group@i(num1>num2[-1]) | |
| 3 | =A2.new(#:xh,~.min(num1):num1,~.max(num2):num2) | |
A1:用sql取数,并按照num1排好序
A2:按数据区间有重叠的分为一组
A3: 对分好的组创建新序表,分别取每一组的最小值和最大值为num1和num2的字段值
计算结果:

SQL数据区间重叠合并
博客探讨了如何处理数据的重叠区间问题,通过SQL查询获取数据并按num1排序,然后利用SPL语言进行区间合并分组,最终形成无重叠的区间记录。
686

被折叠的 条评论
为什么被折叠?



