我需要根据购买价格和日期(先进先出/后进先出)计算 - 比方说 - 商品价格。所以,假设我已经购买了这些商品:
- 2017 年 11 月 10 日以 100 美元的价格购买 3 个 ABC
- 2 x ABC 于 2017 年 11 月 12 日以 80 美元的价格购买
- 2017 年 11 月 11 日,5 x XYZ 售价 120 美元
- 2017-11-12 7 x XYZ 售价 110 美元
首次购买的物品决定了最终产品的价格,因此 ABC 将花费 100 美元以上的前 3 件商品加价,另外 2 件商品的费用为 80 美元以上。
我现在需要的是一种缓存表,应该是这样的:
SKU price max_qty
ABC 100 3
ABC 80 5
XYZ 120 5
XYZ 110 12
请注意,第三列包含的不是购买数量,而是该价格所指的一种数量“上限”。这样我就可以通过简单的 JOIN 来快速估算 4 件 ABC 的售价max_qty >= basket_qty
。这很重要,因为对该表的读取比写入要多得多。
我正在努力以一种关于性能和资源成本的方式生成这样的表。我不能以“每个 sku 查询”的方式进行,因为一次可能有很多记录需要更新。我试过使用 MySQL 变量;
SELECT
sku,
price,
@r := @r + qty AS max_qty
FROM
(SELECT @r := 0) AS r
JOIN
warehouse_items
GROUP BY
sku
ORDER BY
sku, date_in
这个结果集可以很容易地插入到缓存表中,但@r 不会为结果中的每个新 sku 重置。