database - 如何使用较旧的日期字段删除 SQL 中的重复行

标签 database oracle stored-procedures

我的表中有两行完全重复,但日期字段除外。我想通过比较日期来找到这些记录并删除旧记录。

例如我有以下数据

    ctrc_num | Ctrc_name   | some_date
   ---------------------------------------
        12345 | John R      | 2011-01-12
        12345 | John R      | 2012-01-12
        56789 | Sam S       | 2011-01-12
        56789 | Sam S       | 2012-01-12

现在的想法是找到具有不同“some_date”字段的重复项并删除旧记录。最终输出应如下所示。

      ctrc_num | Ctrc_name   | some_date
   ---------------------------------------
        12345 | John R      | 2012-01-12
        56789 | Sam S       | 2012-01-12

另请注意,我的表没有主键,它最初是这样创建的,不知道为什么,它必须适合存储过程。

最佳答案

如果你看这个:

SELECT * FROM <tablename> WHERE some_date IN
(
SELECT MAX(some_date) FROM <tablename> GROUP BY ctrc_num,ctrc_name
HAVING COUNT(ctrc_num) > 1 
AND COUNT(ctrc_name) > 1
)

您可以看到它为重复行选择了最近的两个日期。如果我将括号中的选择切换为“最小日期”并使用它来删除,那么您将删除重复行的两个较旧的日期。

DELETE FROM <tablename> WHERE some_date IN
(
SELECT MIN(some_date) FROM <tablename> GROUP BY ctrc_num,ctrc_name
HAVING COUNT(ctrc_num) > 1 
AND COUNT(ctrc_name) > 1
)

关于database - 如何使用较旧的日期字段删除 SQL 中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32767585/

相关文章:

SQL 查询有条件地连接来自不同数据库的列

sql - Oracle SQL 在包含数据时将列类型从 number 更改为 varchar2

SQL Server - 从临时表复制数据

mysql - WHILE 循环中的 PREPARED STATEMENT

php - 更新 mySQL 列

database - Azure Cosmos DB 中的行级安全性

mysql - 唯一行的 SQL 语句

sql - 在已经存在主键或唯一键约束的列上创建索引

sql - 如何在 pl/sql 中编写遍历数字的循环

python - pymssql : Calling Stored Procedure with parameters