Om de gewenste output te bereiken, moet u lopende totalen van productverkopen berekenen. Om zinvolle gegevens te krijgen, moeten de gegevens in sales
tafel moet chronologisch worden geordend. U heeft dus ten minste één extra veld nodig om gegevens te sorteren - het maakt niet uit of het een tijdstempel of id
is veld. Laten we aannemen dat er een id
. is veld in verkooptabel. Dit is een vraag om te krijgen wat je hebt beschreven:
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
Het tweede exemplaar van sales
tabel genaamd sales_2
wordt gebruikt om de som van eerdere verkopen te berekenen (sales_2.id<sales.id
)
U kunt sales.id
uitsluiten uit de select
clausule, maar je moet het in group by
. houden en order by
.