使用Django ORM中的postgresql窗口的功能进行算术计算?

时间:2019-01-06 22:30:02

标签: django orm

在某些需要在Django中执行的查询中,我使用了LAG之类的postgresql窗口函数。我可以在原始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

我该怎么办?

0 个答案:

没有答案