Pour obtenir le résultat souhaité, vous devez calculer les totaux cumulés des ventes de produits. Pour obtenir des données significatives, les données dans sales
le tableau doit être classé par ordre chronologique. Vous avez donc besoin d'au moins un champ supplémentaire pour trier les données - peu importe s'il s'agit d'un horodatage ou d'un id
champ. Supposons qu'il existe un id
champ dans la table des ventes. Ceci est une requête pour obtenir ce que vous avez décrit :
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
La deuxième instance de sales
table appelée sales_2
est utilisé pour calculer la somme des ventes précédentes (sales_2.id<sales.id
)
Vous pouvez exclure sales.id
depuis le select
clause, mais vous devez la conserver dans group by
et order by
.