sql >> Databasteknik >  >> RDS >> Mysql

Beräkna vinst baserat på först-in, först-ut-prissättning

Bra fråga. Tillvägagångssättet som jag använder är att beräkna den totala försäljningen. Beräkna sedan kumulativa inköp och kombinera dem med speciell logik för att få rätt aritmetik för kombinationen:

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

Obs! Jag har inte testat den här frågan så den kan ha syntaxfel.



  1. Hur infogar man värden i tabell med främmande nyckel med MySQL?

  2. Är det bättre att skapa ett index innan du fyller en tabell med data, eller efter att data är på plats?

  3. Google Maps geokoder för att hitta närliggande platser från MySQL-databasen

  4. Bästa praxisfråga för MySQL:beställa efter id eller datum?