|
递归with
WITH T AS (
SELECT 1 N FROM DUAL UNION ALL
SELECT 3 N FROM DUAL UNION ALL
SELECT 4 N FROM DUAL UNION ALL
SELECT 7 N FROM DUAL UNION ALL
SELECT 10 N FROM DUAL UNION ALL
SELECT 11 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 19 N FROM DUAL UNION ALL
SELECT 20 N FROM DUAL
),v as (
select n, row_number() over(order by n) rn from t
),v1 (flag,n,rn) as (
select n,n,rn from v where rn = 1
union all
select case
when v.n - v1.flag >= 5 then
v.n
else
v1.flag
end,
v.n,
v.rn
from v, v1
where v.rn = v1.rn + 1
)
select * from v1 |
|