选择具有不同ID Oracle 11g的最后一个重复行

时间:2017-07-03 19:44:30

标签: sql oracle11g

我的桌子看起来像这样:

enter image description here

问题是我需要在列#34; NRODENUNCIA"中获得带有重复项的最后一条记录。

2 个答案:

答案 0 :(得分:0)

您的问题有很多解决方案。一种是使用row_number。

请注意,我已经在OVER子句中由DENUNCIID订购了。这定义了"最后记录"作为具有最大DENUNCIID的那个。如果您想以不同方式定义它,则需要更改正在订购的字段。

with dupes as (

SELECT 
        ROW_NUMBER() OVER (Partition by NRODENUNCIA ORDER BY DENUNCIID DESC) RN,
        *
FROM 
     YourTable
)
SELECT * FROM dupes where rn = 1   

这只是每个骗局的最后一条记录。

如果您只想包含具有欺骗的记录,则将where子句更改为

WHERE  rn =1 
  and NRODENUNCIA  in (select NRODENUNCIA from dupes where rn > 1)

答案 1 :(得分:0)

您可以使用MAX(DENUNCIAID)GROUP BY... HAVING查找重复项,然后选择DENUNCIAID行最大的行:

SELECT MAX(DENUNCIAID), NRODENUNCIA, FECHAEMISION, ADUANA, MES, NOMBREESTADO
FROM YourTable
GROUP BY NRODENUNCIA, FECHAEMISION, ADUANA, MES, NOMBREESTADO
HAVING COUNT(1) > 1

这只会显示至少有一个副本的行。如果您还想查看非重复行,只需删除HAVING COUNT(1) > 1

即可