我有带有表格stock_transactions
和stock_transactions_serials
. 库存交易表包含来自仓库的所有 IN 和 OUT 交易。每笔交易都可以有序列号列表,这记录在stock_transactions_serials
索引为 stock_transaction_id+serial_id 的位置。
我需要编写一个查询,列出 qty > 0 的所有位置的连续剧列表。我在这里构建了 SQL fiddle,以便在http://sqlfiddle.com/#!9/520bfa/5上处理一些数据。
目前我的SQL是这样的:
SELECT
ST.id,
ST.warehouse_location_id,
ST.product_id,
SUM(ST.quantity) AS qty,
STS.serials AS serials
FROM stock_transactions ST
LEFT JOIN (
SELECT stock_transaction_id, GROUP_CONCAT(serial_id) AS serials
FROM stock_transactions_serials
GROUP by stock_transaction_id
) STS ON STS.stock_transaction_id = ST.id
WHERE
ST.document_id = 9
GROUP BY ST.warehouse_location_id
HAVING qty > 0
此 SQL 的结果不太正确。数量是正确的,但序列号是错误的……它没有考虑与本文档的其他股票交易一起离开或进入位置的序列号。
结果应该是:
位置 51 连续剧:22229
位置 52 系列:22221、22222、22223、22224、22225
更新:只是为了让我的问题更清楚。您将序列号为 A、B、C、D、E 的 5 台计算机从位置 X 移动到位置 Y。现在您有 5 台笔记本电脑的序列号位于位置 Y。接下来,您将一台笔记本电脑从位置 Y 的序列号 A 移回位置 X。然后是另一台带有序列号 F 的笔记本电脑,从位置 X 到位置 Z...我想知道在所有交易之后每个位置的笔记本电脑数量(以及哪些序列号)......
UPDATE2:也想为没有序列的项目提供解决方案。例如,我将 5 个 USB 记忆棒从位置 A 移动到位置 B。然后将 2 个从 B 移动到 C。最后再将 2 个从 A 移动到 C。每个位置的数量是多少。