我有下表,只有一栏。我想要实现的是将x中没有空隙的所有行分开,例如,数字1-3,5-6和8-9 (因为缺口是4和7)。
+---+
| x |
+---+
| 1 |
| 2 |
| 3 |
| 5 |
| 6 |
| 8 |
| 9 |
+---+
我想让它看起来像这样:一个有两列(a和b)的表,表示前一列x中没有空隙的范围。对每一个空白插入一个新的记录。在PostgreSQL里我该怎么做呢?
+---+---+
| a | b |
+---+---+
| 1 | 3 |
| 5 | 6 |
| 8 | 9 |
+---+---+
发布于 2018-11-07 20:56:56
您可以将该序列与空白序列与没有空白的序列进行比较:
select min(x), max(x)
from
(
select x,
x-row_number() over (order by x) as dummy
from tab
) as dt
group by dummy
x | row_number | x - row_number
| 1 | 1 | 0 -- same value for consecutive values without gaps
| 2 | 2 | 0
| 3 | 3 | 0
| 5 | 4 | 1
| 6 | 5 | 1
| 8 | 6 | 2
| 9 | 7 | 2
https://stackoverflow.com/questions/53197626
复制相似问题