Django получает последнюю запись в группе by [duplicate]
У меня есть записи в следующем формате:
| id | name | created |
-----------------------------------------------
|1 | A |2024-04-10T02:49:47.327583-07:00|
|2 | A |2024-04-01T02:49:47.327583-07:00|
|3 | A |2024-03-01T02:49:47.327583-07:00|
|4 | A |2024-02-01T02:49:47.327583-07:00|
|5 | B |2024-02-01T02:49:47.327583-07:00|
Модель:
class Model1(model.Models):
name = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
Я хочу выполнить group by в django с месяцем из поля created
и получить последнюю запись из этого месяца.
Ожидаемый результат:
| id | name | created |
-----------------------------------------------
|1 | A |2024-04-10T02:49:47.327583-07:00|
|3 | A |2024-03-01T02:49:47.327583-07:00|
|4 | A |2024-02-01T02:49:47.327583-07:00|
До сих пор я пробовал:
from django.db.models.functions import ExtractMonth
m = Model1.objects.get(id=1)
(
Model1.objects.filter(name=m.name)
.annotate(month=ExtractMonth("created"))
.annotate(latest_time=Max("created"))
.values("month", "id")
.order_by("-latest_time")
)
Но это все равно возвращает дублирование данных за месяц. Пожалуйста, поделитесь своими соображениями.