要删除重复数据只留最新的一条,可以使用以下 SQL 查询和删除语句:

  1. 首先,使用窗口函数 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. 接下来,使用上一步中的查询结果作为子查询,并在外部查询中选择行号为 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. 最后,根据上一步中的查询结果进行删除操作,删除行号不为 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录