0

我需要根据购买价格和日期(先进先出/后进先出)计算 - 比方说 - 商品价格。所以,假设我已经购买了这些商品:

  • 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 重置。

4

0 回答 0