如何从数据库中按列删除重复数据
How to delete duplicated data by column form database
我有一个 table 一列有多个重复的行。所以我想清除重复的数据。
事件Table:
event_id, event_type, data_id, data date
1 insert 1 x 06.03.2019 13:04
2 update 1 x1 06.03.2019 13:05
3 update 1 x11 06.03.2019 13:06
4 insert 2 y 06.03.2019 13:07
5 update 1 x111 06.03.2019 13:08
6 delete 1 x111 06.03.2019 13:09
7 update 2 y1 06.03.2019 13:10
8 update 2 y11 06.03.2019 13:11
9 update 2 y11 06.03.2019 13:12
每个数据 ID 在 table 中有 1
插入、N
更新和 1
删除事件行。所以我想删除 N-1
更新事件,但不会删除最后一个事件。
例如在这个 table 中,data_id=1
的更新事件是 2,3,5
。我想删除 2
和 3
但不删除 5
。因为 5
是最后更新。
我会把它写成存在:
DELETE
FROM your_table t1
WHERE EXISTS (SELECT 1 FROM your_table t2
WHERE t1.data_id = t2.data_id AND
t2.event_id < t1.event_id AND
t2.event_type = 'update') AND
t1.event_type = 'update';
有 EXISTS:
delete from tablename t
where
event_type = 'update'
and exists (
select 1 from tablename
where
data_id = t.data_id
and
event_type = 'update'
and
event_id > t.event_id
)
我有一个 table 一列有多个重复的行。所以我想清除重复的数据。
事件Table:
event_id, event_type, data_id, data date
1 insert 1 x 06.03.2019 13:04
2 update 1 x1 06.03.2019 13:05
3 update 1 x11 06.03.2019 13:06
4 insert 2 y 06.03.2019 13:07
5 update 1 x111 06.03.2019 13:08
6 delete 1 x111 06.03.2019 13:09
7 update 2 y1 06.03.2019 13:10
8 update 2 y11 06.03.2019 13:11
9 update 2 y11 06.03.2019 13:12
每个数据 ID 在 table 中有 1
插入、N
更新和 1
删除事件行。所以我想删除 N-1
更新事件,但不会删除最后一个事件。
例如在这个 table 中,data_id=1
的更新事件是 2,3,5
。我想删除 2
和 3
但不删除 5
。因为 5
是最后更新。
我会把它写成存在:
DELETE
FROM your_table t1
WHERE EXISTS (SELECT 1 FROM your_table t2
WHERE t1.data_id = t2.data_id AND
t2.event_id < t1.event_id AND
t2.event_type = 'update') AND
t1.event_type = 'update';
有 EXISTS:
delete from tablename t
where
event_type = 'update'
and exists (
select 1 from tablename
where
data_id = t.data_id
and
event_type = 'update'
and
event_id > t.event_id
)