У меня проблемы с использованием .annotate()
и .aggregate()
в Django ORM.
Структура моей таблицы:
-----------------------------------------------------
| id group_id date_time |
| ================================================= |
| 1 1 2020-01-25 19:51:46.603859 |
| 2 2 2020-01-24 18:40:24.301419 |
| 3 1 2020-01-25 20:14:11.123860 |
| 4 2 2020-01-25 05:20:21.507901 |
-----------------------------------------------------
// Отредактировано
У меня есть следующий MySQL Запрос:
SELECT m.*
FROM my_table m
JOIN (
SELECT group_id, max(date_time) as max_date
FROM my_table
GROUP BY group_id
) as s on m.group_id=s.group_id and m.date_time=s.max_date
, который возвращает:
-----------------------------------------------------
| id group_id date_time |
| ================================================= |
| 3 1 2020-01-25 19:51:46.603859 |
| 4 2 2020-01-24 18:40:24.301419 |
-----------------------------------------------------
И я пытаюсь преобразовать его в Django ORM, чтобы я мог получить полный QuerySet объектов. До сих пор я использовал этот код:
unique_qs = MyModel.objects.filter(id__lte=50).values_list('group_id', flat=True).distinct()
unique_obj = []
for qs in unique_qs:
unique_obj.append(MyModel.objects.filter(group_id = qs).latest('date_time'))
Но он действительно неэффективен и отнимает много времени. Не могли бы вы дать мне понять, как этого добиться?