sql 删除重复数据只留最新的一条
要删除重复数据只留最新的一条,可以使用以下 SQL 查询和删除语句:
- 首先,使用窗口函数
ROW_NUMBER()对数据进行排序和编号,按照某个列(例如时间戳)的降序排列,同时分配一个行号给每一行。最新的一条数据的行号为 1。
SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY timestamp_column DESC) AS rn
FROM your_table;
column1, column2, ...是用于确定重复数据的列,根据实际情况进行替换。timestamp_column是用于确定最新数据的列,根据实际情况进行替换。your_table是包含重复数据的表名,根据实际情况进行替换。
- 接下来,使用上一步中的查询结果作为子查询,并在外部查询中选择行号为 1 的数据,即最新的一条数据。
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY timestamp_column DESC) AS rn
FROM your_table
) AS subquery
WHERE rn = 1;
- 最后,根据上一步中的查询结果进行删除操作,删除行号不为 1 的数据。
DELETE FROM your_table
WHERE (column1, column2, ..., timestamp_column) NOT IN (
SELECT column1, column2, ..., timestamp_column
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY timestamp_column DESC) AS rn
FROM your_table
) AS subquery
WHERE rn = 1
);
your_table是包含重复数据的表名,根据实际情况进行替换。column1, column2, ...是用于确定重复数据的列,根据实际情况进行替换。timestamp_column是用于确定最新数据的列,根据实际情况进行替换。
以上步骤可以根据实际情况进行调整和优化。请确保在执行删除操作之前进行备份,并谨慎操作
原文地址: http://www.cveoy.top/t/topic/hMmT 著作权归作者所有。请勿转载和采集!