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

Calcule las ganancias en función de los precios de primeras entradas, primeras salidas

Buena pregunta. El enfoque que estoy tomando es calcular las ventas totales. Luego calcule las compras acumuladas y combínelas con una lógica especial para obtener la aritmética correcta para la combinación:

select s.sku,
       (MarginPos - SUM(case when s.totalqty < p.cumeqty - p.qty then p.price * p.qty
                             when s.totalqty between p.cumeqty - p.qty and p.qty
                             then s.price * (s.totalqty - (p.cumeqty - p.qty))
                             else 0
                        end)
       ) as Margin
from (select s.sku, SUM(price*qty) as MarginPos, SUM(qty) as totalqty
      from sales s
     ) s left outer join
     (select p.*,
             (select SUM(p.qty) from purchase p2 where p2.sku = p.sku and p2.sale_id <= p.sale_id
             ) as cumeqty
      from purchase s
     )
     on s.sku = p.sku
group by s.sku, MarginPos

Nota:no he probado esta consulta, por lo que podría tener errores de sintaxis.