我正在搜索执行以下操作的SQL命令:
从列A中具有相同值的每组行中删除除B列中具有最高值的行之外的所有行。如果在一个集合中存在多个具有相同B值的行,则至少保留其中一行。< / p>
初始状态:
Completable
期望的结果:
+---+---+
| A | B |
+---+---+
| x | 1 |
| x | 2 |
| y | 3 |
+---+---+
答案 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?
中的一个解决方案