【问题标题】:Delete duplicate rows with lowest values in another column in mysql删除mysql中另一列中具有最低值的重复行
【发布时间】:2021-12-21 15:50:01
【问题描述】:

我是新手,我正在尝试删除另一列中具有最高值的重复行,

This is My database and result of below query

SELECT file_id,src,dst,durations,date_time, COUNT(*), MAX(durations) as 
Max_durations
FROM C2
WHERE durations in (
    SELECT max(durations)
    FROM C2
    GROUP BY src, dst
    HAVING COUNT(*) >1)
GROUP BY src,dst
HAVING COUNT(*)>1

现在我想删除重复的行,但保留具有最大持续时间或等于 Max_duration 列的行,如果具有相同的持续时间,请删除其中一个。

我该怎么做...?

src dst duration COUNT Max_duration
12014504264 9726341011 464 20 684
12014504264 9726645434 320 8 875
12014556435 9726876431 765 4 900
12014576565 9726347656 43 7 600
12014508754 9726344537 233 2 233
12014764532 9726877654 655 2 54
12014587875 9726645443 1345 5 982
12014654536 9726766433 73 2 84

【问题讨论】:

  • 显示一些例子?请作为文本,而不是图像。 “如果有相同的持续时间”特别不清楚
  • 哦,它应该是“如果有相同的持续时间删除 一个 他们”?
  • C2 有主键吗?请编辑您的问题以显示(作为文本,而不是图像)show create table C2;select version(); 的输出
  • 是的,它有,10.4.21-MariaDB CREATE TABLE C2 (file_id int(11) NOT NULL AUTO_INCREMENT, src varchar(200) NOT NULL, dst varchar( 200) 非空,durations int(200) 默认空,date_time 日期时间默认空,remark varchar(200) 默认空,status 枚举('active','inactive','no_conditions') NOT NULL DEFAULT 'active', ref_no int(11) DEFAULT NULL, PRIMARY KEY (file_id) ENGINE=InnoDB AUTO_INCREMENT=1661924 DEFAULT CHARSET=utf8mb4

标签: mysql duplicates mariadb


【解决方案1】:

假设您正在尝试从表中实际删除行,而不仅仅是有一个省略某些行的查询:

为此,只需将优先于当前行的行自连接,因此仅删除找到的行:

delete C2
from C2
join C2 preferred on
    preferred.src=C2.src and
    preferred.dst=C2.dst and
    preferred.durations >= C2.durations and
    (preferred.durations > C2.durations or preferred.file_id < C2.file_id)

但要做到这一点,您需要一些唯一的列来建立具有最长持续时间的多行之间的优先级;这里我使用 file_id 并保留具有最低 file_id 的行。

【讨论】:

  • 感谢您的回答,但我应该使用什么来代替首选...?
  • 我不明白你的问题。 “首选”是我为连接提供 C2 的别名。当您在查询中多次使用同一个表时,通常必须为使用它的一个或多个位置指定别名,可以是任何名称
  • 对不起,我遇到了一个错误,我认为应该使用其他东西,但现在我在 Navicat 上运行这个查询,我的数据库是本地的,但继续运行并且没有结果......! 2小时后
  • 哎哟。如果您打断它,可能需要很长时间才能撤消到目前为止所做的事情。如果你打断它,如果你先alter table C2 add index (src,dst,durations);,它可能会更快
  • 哇,非常感谢您的帮助...效果很好... ?? ?? ??
猜你喜欢
  • 2018-12-29
  • 1970-01-01
  • 2017-06-09
  • 2016-07-26
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多