簡體   English   中英

MySQL查詢以計算平均價格,直到股票價值達到0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM