如何在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数据的表,它位于一个实时系统中。所以我需要用旧记录来识别条目。