gpt4 book ai didi

oracle - 使用 Oracle 11g 比较示例表中具有不同行和列的列

转载 作者:行者123 更新时间:2023-12-01 14:35:34 25 4
gpt4 key购买 nike

这就是我要实现的目标-

考虑下表

CREATE TABLE SAMPLE_TAB
(
COL1 NUMBER,
COL2 NUMBER
)

数据如下-

INSERT INTO sample_tab
VALUES (1 ,3);

INSERT INTO sample_tab
VALUES (3 ,4);

INSERT INTO sample_tab
VALUES (5 ,8)

INSERT INTO sample_tab
VALUES (8 ,12);

INSERT INTO sample_tab
VALUES (13 ,15);

INSERT INTO sample_tab
VALUES (16 ,20);

实际数据

COL1  COL2 1     3 3     4 5     8 8     12 13    15 16    20

如果您注意到,数据在 col2 和 col1 之间有一些重叠示例,第 1 行 Col2(数据 3)与第 2 行 Col1(再次是数据 3)重叠,第 3 行 col2(数据 8)与第 4 行 col1(数据 8)重叠再次)。

如果我们看到这样的重叠,我们需要合并重叠,最终输出应该如下所示

预期结果

COL1  COL2 1     4 5     12 13    15 16    20

有什么想法可以实现吗?

谢谢,S。

最佳答案

这是其中一种方法,在 lag() over() 分析函数的帮助下,我们将源数据划分为逻辑组,这允许我们引用结果集中的先前行,case 表达式来标记一个组,sum() over() 解析函数来组成一个组。最后我们提取一组中的最小 col1 和最大 col2:

with t1 as(
select col1
, col2
, sum(grp) over(order by col1) as grp
from (select col1
, col2
, case
when col1 <> lag(col2) over(order by col1)
then 1
else 0
end as grp
from sample_tab
)
)
select min(col1) as col1
, max(col2) as col2
from t1
group by grp
order by col1

结果:

      COL1       COL2
---------- ----------
1 4
5 12
13 15
16 20

关于oracle - 使用 Oracle 11g 比较示例表中具有不同行和列的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com