【发布时间】:2017-06-10 13:53:18
【问题描述】:
我已经解决了一些相关的合并问题,但我的问题与现有问题略有不同。我的 PostgreSQL 9.5 数据库中有一个表,其中包含四列,即段(唯一组)、高度(数字)、下限(数字)和上限(数字)。样本数据如下:
Segment height lower_limit upper_limit
A 19.3 112 142
A 19.3 142 172
A 20.3 172 202
A 20.3 202 232
A 19.3 232 262
A 19.3 262 292
B 22.1 203 233
B 22.1 233 263
B 22.1 263 293
B 22.1 293 323
B 22.1 323 353
B 22.1 353 383
C 18.9 136 166
C 18.9 166 196
C 18.9 196 226
C 27.1 286 316
C 27.1 316 346
C 6.5 346 376
C 6.5 376 406
我需要根据高度值的差异有条件地合并行。我会尝试分步解释:
- 从第一个高度开始,检查前后行的差值是否小于等于1
- 如果满足条件,则合并具有第一行下限和合并行上限的行
- 如果所有行都合并到一个组中,则选择最常见的高度,第一行的下限和最后合并行的上限
-
对其他组重复此操作
基于上述,所需的输出可能如下:
Segment height lower_limit upper_limit A 19.3 112 292 B 22.1 203 383 C 18.9 136 226 C 27.1 286 346 C 6.5 346 406
有人可以帮助我,以便我可以根据高度差值有条件地合并行吗?
【问题讨论】:
-
有指定顺序的栏目吗?
-
我在代码末尾添加了按 grp 行的顺序。根据所需的输出,我得到 5 行,但以这种方式:C、A、B、C、C。请查看所需的输出。
-
通过
segment,grp添加订单
标签: sql postgresql merge rows difference