Выборка TOP(N) с группировкой по диапазону дат для пользователей с помощью Django ORM
Я пытаюсь получить TOP(N) результатов для каждого пользователя в диапазоне дат. Я знаю, что для получения TOP(N) из любой модели можно использовать функции Window и Rank, например.
qs.annotate(rank=Window(
expression=Rank(),
order_by=F("id").asc(),
partition_by=F('user'),
)
).values('id', 'status', 'rank')
Но мне интересно, как применить Group By для каждого пользователя в диапазоне дат. Позвольте мне объяснить на примере данных, чего я хочу добиться
У меня есть следующие данные, которые вы можете увидеть на следующем изображении
- У Алекса 3 записи (id=1,3,7). Но две из них имеют одинаковые даты (3,7), поэтому из этих двух записей будет считаться последняя, т.е. 7. Таким образом, всего будет возвращено 2 результата для пользователей Ales 1 & 7 или Результаты возвращаются на основе фильтра диапазона дат. Если применяется фильтр 22 сентября, то будет возвращено только 7 результатов. .
- У Джона 9 записей (id=6,10,12,15,16,17,18,20,21), Для 25 октября у него 7 записей, но последняя запись id=21 должна быть возвращена.
- В целом, должна быть возвращена последняя запись для каждого Used, основанная на диапазоне дат. Диапазон дат может быть использован в filter(), если администратор хочет видеть подсчет статусов по определенным датам.