如何在sql中从表中提取和删除旧的重复记录
我有一张桌子:如何在sql中从表中提取和删除旧的重复记录,sql,oracle,Sql,Oracle,我有一张桌子: select * from tmp_dib; 1360 DIBAKAR SE1 1360 DIBAKAR SE 1361 JAI SE1 1361 JAI SE 1365 NITISH SE1 1365 NITISH SE 其中SE1为旧记录,SE为新记录 select a.* from tmp_dib a where rowid
select * from tmp_dib;
1360 DIBAKAR SE1
1360 DIBAKAR SE
1361 JAI SE1
1361 JAI SE
1365 NITISH SE1
1365 NITISH SE
其中SE1为旧记录,SE为新记录
select a.* from tmp_dib a where rowid >
(select min(rowid) from tmp_dib b where a.ID=b.ID);
1360 DIBAKAR SE
1361 JAI SE
1365 NITISH SE
通过下面的查询,我得到了新记录
select a.* from tmp_dib a where rowid >
(select min(rowid) from tmp_dib b where a.ID=b.ID);
1360 DIBAKAR SE
1361 JAI SE
1365 NITISH SE
请帮助我查询旧记录的记录。我想取出旧记录并删除
我的期望输出:
1360 DIBAKAR SE1
1361 JAI SE1
1365 NITISH SE1
这是一个示例表,不是实际的表/数据。。我有一个包含大约10k数据的表,它位于一个实时系统中。因此,我需要用旧记录标识条目。您是否会引用第三列,而不是使用id 您尚未指定列名,但我假定它名为Column3
DELETE TMP_DIB
WHERE Column3 = 'SE1'
尝试使用rowid获取和删除旧记录
DELETE FROM tmp_dib A WHERE ROWID <
(SELECT max(ROWID) FROM tmp_dib b WHERE A.ID=b.ID);
表中可能有最后一个更新日期,对吗?如果是,您可以使用以下查询
delete from tmp_dib where id||last update date in (select id,min(last update date) from tmpbid group by id having count(*)>1)
为什么不扩展获取旧记录的查询来删除旧记录呢?从tmp_dib a中删除,其中rowid>从tmp_dib中选择minrowid,其中a.ID=b.ID;您的查询没有实现您认为它实现的逻辑,因为ROWID是一个伪列,与记录的时间无关。如何确定哪个是旧的,哪个是新的。你有决定的日期吗?是的。。。。。根据提供的信息,rowid是完全无用的,这将完全满足您的需要。嗨,事实上。。这是一个示例表,不是实际数据。。我有一个包含大约10k数据的表,它位于一个实时系统中。所以我需要用旧记录来识别条目。