Получение первого элемента в запросе django orm для каждого уникального значения столбца
У меня есть таблица Snapshots. Она имеет следующие атрибуты:
- device_ip
- created_at
- имя
В таблице имеется несколько записей. Различные записи могут иметь одинаковый device_ip, но будут иметь уникальные имена.
Я хочу получить последнюю запись для каждого устройства_ip, упорядоченную по created_at. Я использую базу данных MySQL.
Вот что я пробовал:
Snapshot.objects.filter(device_ip__in=device_ip_list)
.order_by("-created_at")
.values(
"device_ip", "name", "created_at"
).first()
Но он предоставляет последнюю запись таблицы. Предложения?
Вы должны использовать функцию distinct на уникальном поле (которое в данном случае является "name"). Таким образом, ваш запрос может выглядеть следующим образом:
Snapshot.objects.order_by("-created_at").distinct("name")
или
Snapshot.objects.order_by("name", "-created_at").distinct("name")
- Обратите внимание, что если вы используете
first()
в запросе, он вернет только первый объект набора запросов.