Итак, у меня есть эта таблица (она называется test_table)
id | hotel_id | user_id
1 | 1 | 1
2 | 1 | 1
3 | 1 | 2
4 | 2 | 3
5 | 1 | 2
6 | 3 | 3
Так что, если hotel_id и user_id совпадают, я хочу удалить дублирующиеся строки, но сохранить последнюю строку (последняя строкастрока с более высоким id
).
Таким образом, после удаления моя таблица будет выглядеть так, как показано ниже.
Я удалил id 1
, потому что есть более новая строка id 2
.
Я удалил id 3
, потому что есть более новая строка id 5
.
id | hotel_id | user_id
2 | 1 | 1
4 | 2 | 3
5 | 1 | 2
6 | 3 | 3
Я попытался с кодом ниже, но он только проверяет, является ли один столбец дубликатом.Какой самый эффективный способ сделать это?
delete test_table
from test_table
inner join (
select max(id) as lastId, hotel_id
from test_table
group by hotel_id
having count(*) > 1) duplic on duplic.hotel_id = test_table.hotel_id
where test_table.id < duplic.lastId;