一个例子是最好的解释。 让我们说我有下表:PersonCar(人与车的联合nx n)
╔════════════╦═════════════╗
║ PersonId ║ CarId ║
╠════════════╬═════════════╣
║ 1 ║ 1 ║
║ 1 ║ 2 ║
║ 1 ║ 3 ║
║ 2 ║ 4 ║
║ 2 ║ 5 ║
╚════════════╩═════════════╝
如果我按PersonId对此表进行分组,则Id = 1的人有3辆车关联 我想删除表PersonCar的行,以使最多2辆汽车与一个人相关联。我不关心从协会中删除哪辆车。
这是一个例子。实际上,我有一个很大的测试表,我放了很多关联(用于负载测试),现在,我想通过将X关联最大化来清理。
它是一个oracle数据库。
感谢您的帮助。
答案 0 :(得分:3)
假设组合(person_id, car_id)
在表格中是唯一的,您可以这样做:
delete from car_assignment
where (person_id, car_id)
in (select person_id, car_id
from (
select person_id,
car_id,
row_number() over (partition by person_id order by car_id) as rn
from car_assignment
) t
where rn > 2);
答案 1 :(得分:1)
尝试这种方式怎么样:
Delete from PersonCar
where rowid in ( select row_id
from
(
select rowid row_id,
personid ,
row_number() over(partition by personid order by personid,carid) rnk
from PersonCar
)
where rnk >=3
);