我有以下数字序列,并想在每个相邻数值之间的差大于1时创建一个新的数字组,即打破连续间隔
表T
value
1
2
3
5
6
7
15
16
17
18
需要形成连续区间的群组:
min max
1 3
5 7
15 18
我正在尝试使用dense_rank()函数对行进行编号,就像下面的例子一样,然后我将能够按rankNumber分组并获取MIN(value)和MAX(value),但是我没有找到在此函数的PARTITION BY子句中使用的模式。
value rankNumber
1 1
2 1
3 1
5 2
6 2
7 2
15 3
16 3
17 3
18 3
WITH T2 AS
(
SELECT value, LEAD(value) OVER(ORDER BY value) as nextValue
FROM T
)
SELECT value, DENSE_RANK()
OVER(PARTITION BY CASE WHEN nextValue - value > 1 THEN 1 ELSE 0 END ORDER BY value)
FROM T2
创建表的代码:
CREATE TABLE t(
value INT
);
INSERT INTO t VALUES
(1), (2), (3), (5), (6), (7), (15), (16), (17), (18);
使用上述查询的当前输出:
value rankNumber
1 1
2 2
3 1
5 3
6 4
7 2
15 5
16 6
17 7
18 8