【发布时间】:2017-12-07 03:47:18
【问题描述】:
【问题讨论】:
-
表格实际上没有顺序,因此您需要定义“最后一个”的含义。你也没有说你想要“最后一个”重复记录还是你想要每个重复的“最后一个”记录。
-
没错,我需要每个副本的最后一条记录。我的英语不是很好;)
【问题讨论】:
您可以使用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
【讨论】:
您的问题有多种解决方案。一种是使用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)
【讨论】: