[英]MySQL Query to calculate average price until stock value reaches 0
我有兩個MySQL表要使用,但不幸的是,這個問題超出了我的知識范圍。
第一張表顯示了我的庫存,其中包含產品編號和數量
id PID Quantity
1 5 8
2 45 7
3 125 0
第二張表存儲我為購買庫存產品所做的購買訂單。
id Date PO ID PID Price Purchased Quant.
1 1.1.19 PO1 5 8.00 7
2 1.1.19 PO1 45 2.15 9
3 2.1.19 PO2 5 4.45 6
因此,我想從最近購買日期起計算每個PID
的平均價格。
PID Average Price
5 5.3375
45 2.15
對於PID
“5”我有8只股票,我找到4,45€購買的2.1.19 6個。 因此,我需要在較舊的購買中找到另外2件,在1.1.19上可以找到8.00€。
Average price calculation -> (6pcs * 4.45€ + 2pcs * 8.00€)/8pcs = 5.3375€
對於PID 45,計算應該相同,但是第一個采購訂單完全滿足了我的庫存要求。
有什么辦法可以通過查詢在MySQL中解決此問題。
在8.0之前的MySQL版本中,這並不容易實現。 您可以使用在查詢執行期間會發生變化的變量來做到這一點,但請注意,沒有文件記載的保證變量分配的順序與預期的一樣。
既然我已經給出了免責聲明,下面是您可以使用的查詢:
select pid,
sum(price * take)/sum(take) avg_price
from (
select pid,
price,
@quantity := if(@pid = pid, @quantity, available) needed,
least(@quantity+0, quantity) take,
@quantity := @quantity - least(@quantity, quantity),
@pid := pid
from (select o.*,
p.quantity available
from orders o
inner join products p
on p.pid = o.pid
order by o.pid,
o.date desc) data,
(select @pid := -1,
@quantity := 0) vars
order by pid, date desc) base
group by pid
對於更可靠的方式,您最好遷移到MySQL,在其中可以使用窗口函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.