我有两个MySQL表要使用,但是不幸的是,这个问题超出了我的知识范围。
第一张表显示了我拥有的产品ID和数量的库存
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个库存,我发现在2.1.19上购买了6个,价格为4,45€。因此,我需要在较旧的购买中再找到2件,在1.1.19上可以找到8.00€。
Average price calculation -> (6pcs * 4.45€ + 2pcs * 8.00€)/8pcs = 5.3375€
对于PID 45,计算应相同,但是我的库存已完全满足第一个订单的要求。
有什么办法可以通过查询在MySQL中解决此问题。
答案 0 :(得分:0)
在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。