#django #django-models #django-views
Вопрос:
Как я могу фильтровать с помощью distinct и упорядочивать по
IncomingCallRecording.objects.filter().order_by("lead_id","-created_at").distinct("lead_id")
Проблема:
Заказ по не работает с созданным по адресу
Есть ли альтернативное решение, которое могло бы помочь
Комментарии:
1. Какую ошибку вы получаете. Также вы используете PostGres?
2. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №1:
Вы можете просто использовать created_at
order_by
его .
IncomingCallRecording.objects.order_by("-created_at").distinct("lead_id")
Сортировка по нескольким столбцам выполняется последовательно. Если вы определяете два столбца order_by
, он сортируется по первому столбцу, а затем по второму столбцу (сначала по lead_id
, а затем внутри каждого lead_id
столбца по created_at
).
Обновить
Решение будет подвергнуто обработке в базе данных. Для MYSQL DISTINCT ON
это запрещено. Для POSTGRES DISTINCT ON
выражение должно совпадать ORDER BY
.
В случае POSTGRES
, если вам нужно будет использовать Subquery
, если вы хотите использовать разные DISTINCT ON
ORDER BY
выражения и.
IncomingCallRecording.objects.filter(
pk__in=Subquery(
IncomingCallRecording.objects.distinct('lead_id').values('pk')
)
).order_by('-created_at')
Комментарии:
1. Да, но это не работает: « ВЫБОР РАЗЛИЧНЫХ выражений должен соответствовать начальному ПОРЯДКУ выражений В СТРОКЕ 1: ВЫБЕРИТЕ КОЛИЧЕСТВО(*) ИЗ (ВЫБЕРИТЕ РАЗЛИЧНЫЕ ВЫРАЖЕНИЯ«
2. База данных, которую вы используете?
3. Сейчас я использую postgresql
4. Правильно! Возможно, вам понадобится использовать
Subquery
. Я обновляю ответчик.