一串不重复的数值,从最小的开始,求下一个大于等于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
本文通过SQL查询实现了一段逻辑,从给定的不重复数列中找到所有大于等于5的数,并且从找到的第一个数开始遍历整个序列,输出符合条件的数列。
2133

被折叠的 条评论
为什么被折叠?



