Als ik het goed begrijp, wil je de cumulatieve gemiddelde prijs.
Deze benadering maakt gebruik van subquery's om de cumulatieve totale hoeveelheid en het cumulatieve totaal betaalde te berekenen. De verhouding is de gemiddelde kosten:
select t.*, cumepaid / cumeqty as avg_cost
from (select t.*,
(select SUM(qty) from t t2 where t2.item_id = t.item_id and t2.purch_id <= t.purch_id
) as cumeqty,
(select SUM(qty*unit_price) from t t2 where t2.item_id = t.item_id and t2.purch_id <= t.purch_id
) as cumepaid
from t
) t
In SQL Server 2012 kunt u dit doen door direct cumulatieve sommen te berekenen (moet efficiënter zijn). Je zou dit ook kunnen doen met cross apply
, maar ik geef de voorkeur aan standaard SQL.