Mysql
 sql >> Database >  >> RDS >> Mysql

Come sottrarre inventario e vendita utilizzando la sottoquery mysql?

Per ottenere l'output desiderato è necessario calcolare i totali parziali delle vendite di prodotti. Per ottenere dati significativi, i dati in sales la tabella deve essere ordinata cronologicamente. Quindi hai bisogno di almeno un altro campo per ordinare i dati:non importa se si tratta di un timestamp o di un id campo. Supponiamo che ci sia un id campo nella tabella di vendita. Questa è una query per ottenere ciò che hai descritto:

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 seconda istanza di sales tabella denominata sales_2 viene utilizzato per calcolare la somma delle vendite precedenti (sales_2.id<sales.id )

Puoi escludere sales.id dal select clausola, ma devi tenerla in group by e order by .