Nếu tôi hiểu đúng, bạn muốn giá trung bình tích lũy.
Cách tiếp cận này sử dụng truy vấn con để tính tổng số lượng tích lũy và tổng số tiền tích lũy được trả. Tỷ lệ là chi phí trung bình:
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
Trong SQL Server 2012, bạn có thể thực hiện việc này bằng cách tính trực tiếp tổng tích lũy (sẽ hiệu quả hơn). Bạn cũng có thể làm điều này với cross apply
, nhưng tôi thích SQL chuẩn hơn.