数据库oracle/mysql多条重复数据,取最新的
warning:
这篇文章距离上次修改已过277天,其中的内容可能已经有所变动。
针对Oracle和MySQL数据库中的多条重复数据,取最新的记录,以下是针对这两种数据库的解决方案:
Oracle数据库
在Oracle中,可以使用ROW_NUMBER()
窗口函数来为每组重复数据分配一个序号,然后选择每组中序号为1的记录,即最新的记录。
DELETE FROM your_table
WHERE rowid NOT IN (
SELECT rowid
FROM (
SELECT row_number() OVER (PARTITION BY col1, col2, col3 ORDER BY time_column DESC) rn,
t.*
FROM your_table t
)
WHERE rn = 1
);
在这个例子中,col1, col2, col3
是用来识别重复项的列,time_column
是用来确定最新记录的时间戳列。
MySQL数据库
在MySQL中,可以使用相关子查询来解决这个问题。
DELETE t1 FROM your_table t1
INNER JOIN your_table t2
WHERE t1.id > t2.id
AND t1.col1 = t2.col1
AND t1.col2 = t2.col2
AND t1.col3 = t2.col3;
在这个例子中,id
是表的主键,col1, col2, col3
是用来识别重复项的列。这个查询保留了每组重复数据中id
最小的记录,即最早的记录,并删除了其余的重复记录。如果你想保留最新的记录,那么需要确保id
是按照时间戳递增的,并相应地调整条件。
评论已关闭