sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo restar inventario y venta usando la subconsulta mysql?

Para lograr el resultado deseado, debe calcular los totales acumulados de las ventas de productos. Para obtener datos significativos, los datos en sales La tabla debe estar ordenada cronológicamente. Por lo tanto, necesita al menos un campo más para ordenar los datos; no importa si es una marca de tiempo o id campo. Supongamos que hay un id campo en la tabla de ventas. Esta es una consulta para obtener lo que describiste:

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 segunda instancia de sales tabla llamada sales_2 se utiliza para calcular la suma de las ventas anteriores (sales_2.id<sales.id )

Puede excluir sales.id desde el select cláusula, pero debe mantenerla en group by y order by .