использовать функции окна postgresql в django ORM с арифметическими вычислениями? - PullRequest
0 голосов
/ 07 января 2019

Я использую оконные функции postgresql, такие как LAG, в некоторых запросах, которые мне нужно сделать в Django. У меня это работает в сыром SQL, но я не уверен, как это сделать в ORM.

Упрощенно это выглядит так:

SELECT
    fecha_registro, hora, produccion_neta,
    produccion_neta - LAG (produccion_neta,1)
    OVER 
    (PARTITION BY hora ORDER BY hora ASC,fecha_registro ASC) 
    AS prod_dia_anterior
    FROM
    crudo_produccionoperadadiaria
    INNER JOIN crudo_horaregistroproduccion ON crudo_produccionoperadadiaria.tiempo_produccion_id = crudo_horaregistroproduccion.id

В Django вот так:

def produccion_operada_dia_list(request):
    #prod_oper_dia = ProduccionOperadaDiaria.objects.order_by('fecha_registro')
    prod_oper_dia=ProduccionOperadaDiaria.objects.annotate(variacion=Window(
    expression=Lag(F('produccion_neta'),1),
    order_by=[F('tiempo_produccion').asc(), F('fecha_registro').asc()],
    partition_by=F('tiempo_produccion')))
    context = {'prod_oper_dia': prod_oper_dia}
    return render(request, 'crudo/produccion_operada_dia_list.html', context)

Однако я не знаю, как реализовать вычитание, чтобы иметь вариацию:

SELECT
        fecha_registro, hora, produccion_neta,
        ***produccion_neta - LAG (produccion_neta,1)***
        OVER 
        (PARTITION BY hora ORDER BY hora ASC,fecha_registro ASC) 
        AS prod_dia_anterior
        FROM
        crudo_produccionoperadadiaria
        INNER JOIN crudo_horaregistroproduccion ON crudo_produccionoperadadiaria.tiempo_produccion_id = crudo_horaregistroproduccion.id

как я могу это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...