我有一张如下所示的桌子
range_from range_end created_on
100 105 2023-01-01
106 110 2023-01-01
106 111 2023-06-01
120 130 2023-01-01
112 130 2023-06-01
我需要清理它以获得最新的且不重叠的表格。
结果应该是这样的
range_from range_end created_on
100 105 2023-01-01
106 111 2023-06-01
112 130 2023-06-01
我遇到的问题是我不知道如何让循环在“where”之后继续运行,也不知道如何删除 select 语句下的行。 我的代码是:
with recursive bin_range as (
select bin_from, bin_end, created_on,
row_number() over(order by bin_from) rownum,
from raw_BIN
qualify rownum =1
union all
select v.bin_from, v.bin_end, v.created_on,
v.rownum
from bin_range B
join ( select bin_from, bin_end, created_on,
row_number() over(order by bin_from) rownum,
from raw_BIN
)V on B.rownum +1 = V.rownum
where v.bin_from < b.bin_end
)
select * from bin_range;
非常感谢!
你不需要递归 cte :
SELECT *
FROM raw_BIN t1
WHERE EXISTS (
SELECT *
FROM raw_BIN t2
WHERE (t1.range_from <> t2.range_from OR t1.range_end <> t2.range_end)
AND t1.range_from BETWEEN t2.range_from AND t2.range_end
AND t1.range_end BETWEEN t2.range_from AND t2.range_end
);