我有一些排序值(称为点),必须根据它们与前一行的差异进行组合,如下例所示。
在此示例中,当点与前一个点的差异大于10时,将启动一个新组。
point group
1 1
2 1
3 1
101 2
103 2
105 2
213 3
214 3
215 3
使用lag
窗口函数,我可以计算点之间的差异,但是我错过了构建组的部分,如上例所示。
感谢任何帮助,谢谢!
答案 0 :(得分:2)
select point, sum(inc) over (order by point)+1 as group
from (
select point,
(case when point-lag(point,1) over (order by point) > 1 then 1 else 0 end) inc
from whatevertable
) base
order by point
可能有一种方法可以在没有子选择的情况下完成,但这就是我想出来的。