Para alcançar a saída desejada, você precisa calcular os totais correntes de vendas de produtos. Para obter dados significativos, os dados em
sales
tabela deve ser ordenada cronologicamente. Portanto, você precisa de pelo menos mais um campo para classificar os dados - não importa se é um carimbo de data/hora ou id
campo. Vamos supor que haja um id
campo na tabela de vendas. Esta é uma consulta para obter o que você descreveu:SELECT
sales.id,
sales.store_id,
sales.product_id,
inventories.quantity-IFNULL(SUM(sales_2.quantity), 0) as inventory,
sales.quantity as sales,
inventories.quantity-IFNULL(SUM(sales_2.quantity), 0) - sales.quantity as remaining
FROM
sales
INNER JOIN
inventories ON inventories.store_id = sales.store_id
AND inventories.product_id = sales.product_id
LEFT JOIN
sales AS sales_2 ON sales_2.store_id = sales.store_id
AND sales_2.product_id = sales.product_id
AND sales_2.id < sales.id
GROUP BY sales.id , sales.store_id , sales.product_id
ORDER BY sales.id
A segunda instância de
sales
tabela chamada sales_2
é usado para calcular a soma das vendas anteriores (sales_2.id<sales.id
) Você pode excluir
sales.id
a partir do select
cláusula, mas você precisa mantê-la em group by
e order by
.