从列A中具有相同值的每组行中删除除B列中具有最高值的行之外的所有行

时间:2016-10-27 18:51:03

标签: mysql sql

我正在搜索执行以下操作的SQL命令:

从列A中具有相同值的每组行中删除除B列中具有最高值的行之外的所有行。如果在一个集合中存在多个具有相同B值的行,则至少保留其中一行。< / p>

附加说明

  • 不应修改列格式,也不需要额外的表格来实现所需的结果。
  • 该表只有两列,其中没有一列是主键,唯一键或多次键。
  • 查询应该适用于更大的数据集,即运行时间应该与表中的行数成比例(不是二次/指数)。

实施例

初始状态:

Completable

期望的结果:

+---+---+
| A | B |
+---+---+
| x | 1 |
| x | 2 |
| y | 3 |
+---+---+

4 个答案:

答案 0 :(得分:1)

哦,这是一种痛苦。我认为最好的方法是if (query != null && query.Key != 0) { query = new KeyValuePair<int, double>(query.Key, 3); } / truncate

insert

另一种选择是添加第三列并分配一个唯一的数字,然后可以用于删除。

答案 1 :(得分:0)

此查询应该有效!

我保留每个A的所有MAX B并删除表中不需要的所有剩余行。

DELETE s1
FROM table s1,
    ( SELECT A,MAX(B) AS B FROM table GROUP BY A ) s2
WHERE s1.A = s2.A 
    AND s1.B <> s2.B;

答案 2 :(得分:0)

使用MySQL的多表删除:

delete t2
from mytable t1, mytable t2
where t2.A = t1.A
and t2.B < t1.B

A上的索引将使此功能良好。

答案 3 :(得分:-1)

JOIN与每个A获得最大B的子查询一起使用,并使JOIN条件与B与此匹配的行匹配。

DELETE t1
FROM Table AS t1
JOIN (
    SELECT A, MAX(B) AS maxB
    FROM Table
    GROUP BY A) AS t2
ON t1.A = t2.A AND t1.B != maxB

要删除剩余的重复项,请使用How to delete duplicates on a MySQL table?

中的一个解决方案