Запрос с подзапросом в Django ORM

все!

Я сломал голову, пытаясь написать это на Django ORM. Помогите мне, пожалуйста!

SELECT *
FROM (
  SELECT *, ROUND(AVG(foo) OVER w) AS avg_foo
  FROM t1
  WINDOW w AS (PARTITION BY DATE_PART('doy', date))
) AS t2

Я пытался написать что-то вроде этого:

MyModel.objects.annotate(
    avg_foo=Round(
        Window(
            expression=Avg('foo'),
            partition_by=Extract('date', 'doy')
        )
    )
)

Но если я начинаю фильтровать запрос по дате, среднее значение вычисляется из усеченной выборки, в отличие от RawQuery.

Модель:

class MyModel(models.Model):
    date = models.DateField()
    foo = models.IntegerField()
Вернуться на верх