Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Calcular o lucro com base no preço do primeiro a entrar, primeiro a sair


Boa pergunta. A abordagem que estou tomando é calcular o total de vendas. Em seguida, calcule as compras cumulativas e combine-as com uma lógica especial para obter a aritmética correta para a combinação:
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

Observação:não testei essa consulta, portanto, pode haver erros de sintaxe.