如何选择重复的最高记录并创建新表?

Posted

技术标签:

【中文标题】如何选择重复的最高记录并创建新表?【英文标题】:How to select top record of duplicates and create new table? 【发布时间】:2018-11-03 00:32:58 【问题描述】:

我有下表:

=====================
RecNum ID     Date
=====================
12345  188832 2045-01-07
33445  188832 2035-10-01
66789  188849 2047-10-18
77889  340520 2047-04-28
99776  340520 2047-04-28
=====================

我需要生成一个只有一个ID对应最新日期的新表。

如您所见,ID 188832 有两个日期:2045-01-07 和 2035-10-01。 我只需要最新的:2045-01-07。

188849 只有一个日期,应该保持原样。 340520 有两条相同日期的记录 - 我只需要选择一条。

RecNum 是唯一的。

【问题讨论】:

【参考方案1】:

ROW_NUMBER 应该在这里工作:

SELECT RecNum, ID, Date
FROM
(
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date DESC) rn
    FROM yourTable t
) t
WHERE rn = 1;

请注意,在ID = 340520 的情况下,上述查询将任意选择两条记录之一。如果您有一些逻辑来确定如何处理此类关系,则可以修改查询。

【讨论】:

以上是关于如何选择重复的最高记录并创建新表?的主要内容,如果未能解决你的问题,请参考以下文章

对于每条记录,还要为记录选择具有最高值的数据[重复]

如何将存储过程的结果返回到用于插入记录的选择语句

如何选择具有父子关系的记录对父级具有最高分数

如何使用命令选择特定的列标题并创建视图[重复]

如何连接具有选择性重复记录的表? (oracle10g)

插入创建新表