Mysql
 sql >> Base de données >  >> RDS >> Mysql

Calculer le bénéfice en fonction du prix du premier entré, premier sorti

Bonne question. L'approche que je prends est de calculer les ventes totales. Calculez ensuite les achats cumulés et combinez-les avec une logique spéciale pour obtenir la bonne arithmétique pour la combinaison :

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

Remarque :Je n'ai pas testé cette requête, elle peut donc contenir des erreurs de syntaxe.