我的表中有两行完全重复,但日期字段除外。我想通过比较日期来找到这些记录并删除旧记录。
例如我有以下数据
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/