Aby osiągnąć pożądany wynik, musisz obliczyć bieżące sumy sprzedaży produktów. Aby uzyskać sensowne dane, dane w sales
tabela musi być uporządkowana chronologicznie. Potrzebujesz więc co najmniej jeszcze jednego pola do sortowania danych — nie ma znaczenia, czy jest to znacznik czasu, czy id
pole. Załóżmy, że istnieje id
pole w tabeli sprzedaży. To jest zapytanie, aby uzyskać to, co opisałeś:
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
Drugie wystąpienie sales
tabela o nazwie sales_2
służy do obliczania sumy wcześniejszej sprzedaży (sales_2.id<sales.id
)
Możesz wykluczyć sales.id
z select
klauzula, ale musisz trzymać ją w group by
i order by
.