You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB中删除DATE字段重复的行?(SQL新手求助)

在MariaDB中删除DATE字段重复的行(对应pandas的drop_duplicates)

嘿,作为刚接触SQL的新手,碰到这种和pandas里drop_duplicates()类似的去重需求太常见了!结合你的表有自增id字段的情况,我给你几个在MariaDB里完全可行的方案:

方法1:通过自增ID直接删除重复行(推荐)

你的表有自增id,这是处理重复行的关键!我们可以利用id来区分同一date下的重复记录,只保留其中一条(比如保留每个date对应的最小id行,和你给出的样本期望结果一致)。

执行下面的SQL语句(记得把your_table_name换成你实际的表名):

DELETE t1 FROM your_table_name t1
JOIN your_table_name t2 
ON t1.date = t2.date AND t1.id > t2.id;

解释:这个语句会将每个date分组里,id更大的重复行删除,最终每个date只会留下id最小的那一行。

方法2:用临时表批量处理(适合大数据量表)

如果你的表数据量很大,方法1的JOIN操作可能效率偏低,这时可以用临时表的方式来批量处理:

  1. 先将去重后的数据插入临时表(确保只保留每个date的一条记录):
-- 严谨的写法:取每个date对应的最小id的行
CREATE TEMPORARY TABLE temp_unique_dates
SELECT t1.* FROM your_table_name t1
INNER JOIN (
    SELECT date, MIN(id) AS min_id
    FROM your_table_name
    GROUP BY date
) t2 ON t1.id = t2.min_id;
  1. 清空原表(注意:一定要先备份表再执行这一步!):
TRUNCATE TABLE your_table_name;
  1. 将临时表的数据导回原表:
INSERT INTO your_table_name
SELECT * FROM temp_unique_dates;
  1. 删除临时表(可选,会话结束后临时表会自动删除):
DROP TEMPORARY TABLE temp_unique_dates;

关键注意事项&建议

  • 操作前必须备份表! 可以用这条语句快速备份:CREATE TABLE backup_table AS SELECT * FROM your_table_name;,避免误删重要数据。
  • 先验证再执行删除操作:比如先运行SELECT t1.* FROM your_table_name t1 JOIN your_table_name t2 ON t1.date = t2.date AND t1.id > t2.id;,查看哪些行会被删除,确认无误后再执行DELETE。
  • 确保date字段格式统一:如果你的date是字符串类型(比如样本里的2019.02.04 00:00:00),要保证所有日期格式一致,避免因格式差异出现“假重复”或漏删情况。如果是datetime类型会更稳妥。
  • 你的MariaDB版本是10.1.34,上面的所有语法都完全兼容,不用担心版本适配问题。

内容的提问来源于stack exchange,提问作者user9281198

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:23:58