Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Berechnen Sie den Gewinn basierend auf First-In, First-Out-Preisen

Gute Frage. Der Ansatz, den ich nehme, ist, den Gesamtumsatz zu berechnen. Berechnen Sie dann kumulative Käufe und kombinieren Sie sie mit einer speziellen Logik, um die richtige Arithmetik für die Kombination zu erhalten:

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

Hinweis:Ich habe diese Abfrage nicht getestet, daher könnte sie Syntaxfehler enthalten.