postgresql 按与上一行的差异分组
postgresql group by difference to previous row
我有一些排序值(称为点),必须根据它们与前一行的差异将它们组合在一起,如下例所示。
在此示例中,当点与前一个点的差异大于 10 时,将开始一个新组。
point group
1 1
2 1
3 1
101 2
103 2
105 2
213 3
214 3
215 3
使用 lag
window 函数我可以计算点之间的差异,但我缺少构建组的部分,如上例所示。
感谢任何帮助,谢谢!
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
可能有一种方法可以不用子select,但这是我想出的方法。
我有一些排序值(称为点),必须根据它们与前一行的差异将它们组合在一起,如下例所示。
在此示例中,当点与前一个点的差异大于 10 时,将开始一个新组。
point group
1 1
2 1
3 1
101 2
103 2
105 2
213 3
214 3
215 3
使用 lag
window 函数我可以计算点之间的差异,但我缺少构建组的部分,如上例所示。
感谢任何帮助,谢谢!
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
可能有一种方法可以不用子select,但这是我想出的方法。