Кумулятивный итог можно вычислить, используя оконную функцию SUM() в сочетании с предложением OVER — без свёртывания строк, как это делал бы стандартный GROUP BY.
SELECT
product_id,
sale_date,
amount,
SUM(amount) OVER (
PARTITION BY product_id
ORDER BY sale_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_total
FROM sales;
PARTITION BY product_id — сбрасывает кумулятивный итог независимо для каждого продуктаORDER BY sale_date — определяет хронологический порядок, в котором суммируются значенияROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW — явно задаёт фрейм окна, суммируя все строки от первой до текущей включительноПредложение PARTITION BY product_id гарантирует, что промежуточный итог сбрасывается независимо для каждого продукта, предотвращая суммирование продаж разных товаров.
Новый — ещё не проверен сообществом
Вы