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
            )


    '''
    )
Вернуться на верх