【发布时间】:2017-10-20 02:39:30
【问题描述】:
我有一个 Oracle 表 T,其中有多个具有不同开始日期的记录。我想删除所有,但保留 col1、col2、col3 的相同组合中日期最大的那个。在此示例中,我想保留日期为 31-May-17 的一个并删除另外两个。在不创建另一个临时表的情况下,在单个查询中实现此目标的最佳方法是什么?
测试脚本 -
create table t
(col1 number(10)
,col2 number(10)
,col3 number(10)
,col4 number(10)
,col5 date
);
insert into t values (15731,467,4087,14427,'09-Apr-17');
insert into t values (15731,467,4087,17828,'31-May-17');
insert into t values (15731,467,4087,15499,'16-Apr-17');
commit;
select * from t;[enter image description here][1]
根据上面的数据,我想只保留日期为 31-May-17 的记录,因为这是具有相同 col1、col2、col3 组合的日期中最大的日期,并删除其余两个日期桌子。请注意,此表上还有数百万条其他记录,例如上面的记录。 如果这对 Oracle 专家来说太天真了,请道歉,但我是在这个地方尝试使用 Oracle db 的新手。
【问题讨论】:
-
从现在开始,你将如何在相同的时间距离内打破多条记录?
-
这正是我意识到实现的挑战——如果时间位移相同怎么办?为了使它更简单,我更改了我的标准以删除具有相同键 col1、col2 和 col3 的旧日期,并保留该键组合中日期最大的记录。谢谢指出!!
-
请更改您的描述,明确如何处理关系。请举个例子来说明这种情况。
标签: sql oracle select oracle12c