Получение нарастающей суммы с группировкой по в django orm
У меня есть таблица из двух (соответствующих) столбцов. таблица: Транзакция столбцы: дата_транзакции, сумма
Я хотел бы получить кумулятивную сумму за каждый месяц. То есть, для каждого месяца получить сумму транзакций с начала до этого момента времени. В PostgreSQL я бы сделал примерно следующее:
SELECT date_trunc('month', transaction_date::date) AS formatted_transaction_date,
SUM(SUM(amount)) OVER (ORDER BY date_trunc('month', transaction_date::date)
ROWS UNBOUNDED PRECEDING) AS cumulative_transaction_amount
FROM transaction
GROUP BY date_trunc('month', transaction_date::date);
Я пытаюсь сделать то же самое в Django Orm. Ближе всего мне удалось добиться следующего:
Transaction.objects.values(
formatted_transaction_date=TruncMonth('transaction_date')
).annotate(
cumulative_transaction_amount=Window(
expression=Sum('amount'),
order_by=TruncMonth('transaction_date').asc(),
frame=RowRange(start=None, end=0),
),
)
Однако это приводит к ошибке:
django.db.utils.ProgrammingError: колонка "transaction.amount" должна присутствовать в предложении GROUP BY или использоваться в агрегатной функции
.
Я понимаю, что запрос Django, который я выполняю, не идентичен запросу PostgreSQL. Запрос PostgreSQL выполняет SUM(SUM(amount))
, а запрос Django переводится просто как SUM(amount)
.
Однако я не смог найти синтаксис Django для достижения того же результата. Что я делаю неправильно?