За да постигнете желания резултат, трябва да изчислите текущите общи продажби на продукти. За да получите смислени данни, данните в sales
таблицата трябва да бъде подредена в хронологичен ред. Така че имате нужда от поне още едно поле за сортиране на данни - няма значение дали е времеви печат или id
поле. Да предположим, че има id
поле в таблицата за продажби. Това е заявка, за да получите това, което описахте:
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
Вторият екземпляр на sales
таблица, наречена sales_2
се използва за изчисляване на сумата от по-ранни продажби (sales_2.id<sales.id
)
Можете да изключите sales.id
от select
клауза, но трябва да я запазите в group by
и order by
.