Chcete-li dosáhnout požadovaného výstupu, musíte vypočítat průběžné součty prodeje produktů. Chcete-li získat smysluplná data, použijte data v sales
tabulku je nutné seřadit chronologicky. K řazení dat tedy potřebujete alespoň jedno další pole – nezáleží na tom, zda se jedná o časové razítko nebo id
pole. Předpokládejme, že existuje id
pole v prodejní tabulce. Toto je dotaz k získání toho, co jste popsali:
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
Druhá instance sales
tabulka s názvem sales_2
se používá k výpočtu součtu dřívějších prodejů (sales_2.id<sales.id
)
Můžete vyloučit sales.id
z select
klauzuli, ale musíte ji ponechat v group by
a order by
.