Mysql
 sql >> Database >  >> RDS >> Mysql

Calcola il profitto in base al prezzo first-in, first-out

Buona domanda. L'approccio che sto adottando è calcolare le vendite totali. Quindi calcola gli acquisti cumulativi e combinali con una logica speciale per ottenere l'aritmetica giusta per la combinazione:

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:non ho testato questa query, quindi potrebbe contenere errori di sintassi.