Как сгруппировать по и получить последнюю запись в группе, содержащей все поля в Django?
Представьте, что у нас есть таблица следующего вида:
| id | name | type | created_at |
|---|---|---|---|
| 1 | James | male | 2022-03-02 |
| 2 | Jane | female | 2022-04-02 |
| 3 | Kirk | male | 2022-03-04 |
| 4 | Sarah | female | 2022-04-04 |
| 5 | Jason | male | 2022-03-05 |
И я хочу сгруппировать по типу и просто получить последние записи на основе created_at.
Поэтому я попробовал этот код и неплохо:
result = User.objects.values('type').annotate(
latest_date=Max('created_at'),
)
При печати результата я сталкиваюсь с этим:
<QuerySet [
{'type': 'male', 'latest_date': '2022-03-05'},
{'type': 'female', 'latest_date': '2022-04-04'}
]>
Мой вопрос: где находятся другие поля id и name?
Я ожидаю получить:
<QuerySet [
{id: 5, name: 'Jason', 'type': 'male', 'latest_date': '2022-03-05'},
{id: 4, name: 'Sarah', 'type': 'female', 'latest_date': '2022-04-04'}
]>
Используйте order_by с distinct
User.objects.order_by("type", "-created_at").distinct("type")
это может помочь вам
result = User.objects.values('type').annotate(
latest_date=Max('created_at'),
).values('id','name','type','latest_date')