【发布时间】:2017-02-18 19:30:25
【问题描述】:
我不知道该怎么问,但无论如何我都会尝试。我有一个数据库结构,可以跟踪每种产品、产品批次和仓库位置的库存。这让我可以准确地知道有哪些产品、价格和位置。
基本上我用两张表来追踪
-
stock_transactions[id, product_id, lot_id, warehouse_location_id, type, quantity]-
product_id= 仓库中 SKU 商品的唯一标识符 -
lot_id= 到达仓库的产品批次的唯一标识符。 -
warehouse_location_id= 仓库位置的唯一标识符 -
type= 交易类型 [IN = 进入位置,OUT = OUT 位置]
-
stock_transactions_serials[stock_transaction_id, serial_id]`:
我正在stock_transactions 中为我们从仓库位置移动到另一个位置的每件物品创建一个条目。例如。如果我将 5 件产品 A 从位置 X 移动到位置 y,我将创建两个条目:
INSERT INTO stock_transactions
(id, product_id, lot_id, warehouse_location_id, type, quantity)
VALUES (1, 'A', 'Aq2er4', 'X', 'Out', -5)
INSERT INTO stock_transactions
(id, product_id, lot_id, warehouse_location_id, type, quantity)
VALUES (1, 'A', 'Aq2er4', 'Y', 'In', 5)
我们通过序列号跟踪某些产品。例如,如果上述产品有序列号,我们将使用条形码阅读器扫描我们已将产品 A 的哪些序列号移动到另一个位置。 stock_transactions_serials 表将跟踪每笔股票交易的序列号。
现在我有两个问题需要解决:
1。我需要获取库存产品和数量列表(按 product_id、lot_id 和 location_id 分组。我通过以下方式实现了这一点:
SELECT id, product_id, lot_id, warehouse_location_id, sum(ST.quantity) as qty
FROM stock_transactions ST
GROUP BY product_id, lot_id, warehouse_location_id
HAVING qty > 0
我在这里创建了带有一些数据的 SQLFiddle:http://sqlfiddle.com/#!9/fb352/2。
2。我需要为该库存获取正确的序列号。我不知道如何解决这个问题......
如果我加入表格,我不会得到正确的结果,或者我的股票 SUM 是错误的。有任何想法吗?我需要以某种方式了解 In 和 Out 交易之间的差异并获得正确的连续剧。
【问题讨论】:
-
一般的 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须要么标识一个分组列,要么是一个集合函数的参数!
-
我猜,你必须使用子查询。
-
@AT-2016 是的,我想,想弄清楚如何