我有这样的 table
|-------------------------|
| A | B | C |
|-------------------------|
| 1 | 2 | 5 |
|-------------------------|
| 1 | 2 | 10 |
|-------------------------|
| 1 | 2 | 2 |
|-------------------------|
我需要删除所有具有等于 A nad B 值和较低 C 值的重复行
在运行 sql 脚本后,对于每个等于 A 和 B 的列,我只需要具有最高 C 值的这一行
|-------------------------|
| A | B | V |
|-------------------------|
| 1 | 2 | 10 |
|-------------------------|
最佳答案
一种方法是窗口函数:
select t.*
from (select t.*,
row_number() over (partition by a, b order by v desc) as seqnum
from t
) t
where seqnum = 1;
这会返回整行,如果您需要额外的列,这会很方便。如果您真的只需要这三列,则聚合可以满足您的需求:
select a, b, max(v)
from t
group by a, b;
在标准 SQL 中,您可以使用以下方法仅保留最大值:
delete from t
where t.v < (select max(t2.v) from t t2 where t2.a = t.a and t2.b = t.b);
关于sql - 删除sql中所有重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66154455/