Выборка 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 должна быть возвращена.

enter image description here

  • В целом, должна быть возвращена последняя запись для каждого Used, основанная на диапазоне дат. Диапазон дат может быть использован в filter(), если администратор хочет видеть подсчет статусов по определенным датам.
Вернуться на верх