Как сгруппировать по и получить последнюю запись в группе, содержащей все поля в 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')