一串不重复的数值,从最小的开始,求下一个大于等于5的值,再从第求出的值开始,直至结束,求序列
测试数据
WITH t1(num)
AS (SELECT 1 UNION ALL
SELECT 3 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 12 UNION ALL
SELECT 15 UNION ALL
SELECT 16 UNION ALL
SELECT 17 UNION ALL
SELECT 20 UNION ALL
SELECT 21 UNION ALL
SELECT 24)
先按大小排序,加最小值列,再CTE递归计算
WITH t2
AS (SELECT Row_number() OVER(ORDER BY num) id,
num,
Min(num) OVER() num2
FROM t1),
t3
AS (SELECT *
FROM t2
WHERE id = 1
UNION ALL
SELECT t2.id,
t2.num,
CASE
WHEN t2.num - t3.num2 >= 5 THEN t2.num
ELSE t3.num2
END
FROM t2
INNER JOIN t3
ON t2.id = t3.id + 1)
SELECT num
FROM t3
WHERE num = num2
结果
1
6
12
17
24