在某些需要在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
我该怎么办?