@vhsporno

Как очистить таблицу кроме последних N записей?

Есть таблица истории:
user
value
datetime_open

Нужно удалить все кроме последних 20 записей по каждому юзеру. Как это сделать? Желательно способами джанги
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 2
netpastor
@netpastor
Python developer
Ну чтото наподобие
import itertools

_ids = [u.histories.order_by('-datetime_open').values_list('pk', flat=True)[:20] for u in User.objects.all()]
last_20_history_ids = list(itertools.chain.from_iterable(_ids))
History.objects.exclude(pk__in=last_20_history_ids).delete()
Ответ написан
Комментировать
trapwalker
@trapwalker
Программист, энтузиаст
Я бы одним SQL-запросом это сделал.
DELETE FROM my_history_table t 
WHERE t.id <= (
    SELECT t2.id
    FROM my_history_table t2 
    ORDER BY datetime_open DESC
    SKIP 20
    LIMIT 1
)

Диалект SQL подправить по вкусу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы