Django Удаление дубликатов строк и сохранение последней с помощью SQL запроса
Мне нужно выполнить SQL запрос, который удаляет дублирующиеся строки на основе одного столбца и сохраняет последнюю запись. Отмечая, что это большая таблица, поэтому Django ORM занимает очень много времени, поэтому мне нужен SQL запрос вместо этого. Имя столбца - customer_number и имя таблицы - pages_dataupload. Я использую sqlite.
Вы можете работать с Exists
подзапросом [Django-doc], чтобы эффективно определить, существует ли младший DataUpload
:
from django.db.models import Exists, OuterRef
DataUpload.objects.filter(Exists(
DataUpload.objects.filter(
pk__gt=OuterRef('pk'), customer_number=OuterRef('customer_number')
)
)).delete()
Таким образом, для каждого DataUpload
будет проверено, существует ли DataUpload
с большим первичным ключом, который имеет такой же customer_number
. Если это так, то мы удалим этот DataUpload
.
Я решил проблему с помощью следующего запроса, есть ли способ сбросить поле id после удаления дубликата?
cursor = connection.cursor()
cursor.execute(
'''
DELETE FROM pages_dataupload WHERE id not in (
SELECT Max(id) FROM pages_dataupload Group By Dial
)
'''
)