Я использую оконные функции 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
как я могу это сделать?