Django Использование Row_Number в ORM с group_by

У меня есть база данных (скриншот прилагается), и я хочу получить среднее значение показаний в соответствии с указанным размером агрегации. Предположим, что мой размер агрегации равен 2. введите описание изображения здесь

Итак, как показано на рисунке, есть четыре показания для определенного идентификатора клиента и идентификатора устройства. Таким образом, мне нужно сгруппировать два показания в одну строку средних показаний, а два других показания - в другую строку.


    def get_aggregation_filter(self, queryset, name, value):
    subq = queryset.annotate(row_number=Window(
    expression=RowNumber()
    # partition_by=2,
    # order_by=F('time').asc()
    ))
    
    outsubq = subq.annotate(group_id=((F('row_number') - 1)/ 2) + 1)
    
    queryset = outsubq.annotate(avg=Avg('reading'))
    return queryset

Я не могу применить group by к group_id, который я создал с помощью annotate. Любая помощь будет принята с благодарностью.

Почему-то внутренние механизмы django делают не то, что вы думаете, когда комбинируют аннотацию с функциями Window. Фильтрация также не работает при комбинировании аннотации с окном.

Я пробовал запрос и множественный пример, просто чтобы увидеть, что здесь все еще открыт билет :

https://code.djangoproject.com/ticket/28333

Как видите, кто-то использует сырой sql для выполнения того, что вы хотите, и это вызвано тем, что queryset не оборачивает args оконной функции в отдельный подзапрос.

Вернуться на верх