[英]Query for showing stock as of given date in the past
我正在开发用于仓库管理的软件。
我得到了三个表: itemstock, documents, doc_pcs
itemstock
字段(未全部显示):
rfid_no
(这是唯一的主键) item_name
status
documents
栏位:
id
doc_date
doc_type
doc_pcs
栏位:
id
id_doc
| 这两个是主键 pos
| ( id_doc
已连接到documents.id
) rfid_no
(来自itemstock.rfid_no
) 第一个表用于收集项目的记录,从该表中不会删除任何内容,当特定项目发生某些事情时(只是返回给客户,再回来等),状态只是变化。
Documents
和doc_pcs
表存储文档数据。
doc_type
用于标记文档中的项目是进出仓库还是进出仓库。
问题是:我需要创建查询以显示给定日期的所有库存。
换句话说:它应显示status=6
(“已存储”)的今天项目itemstock
所有项目,其中rfid_no
MINUS记录在doc_pcs
与今天到给定日期之间的documents
相关,并且doc_type="out"
PLUS记录与rfid_no
那些在比赛doc_pcs
有关documents
今天与给定日期之间,并与日doc_type="in"
几天来一直在寻找任何线索,我找不到任何可以使我找到解决方案的东西。 我将不胜感激!
样本数据:
itemstock
(截至今天):
00300D0909DA, "tshirt", 6
00300D0909DB, "apron", 6
00300D0909DC, "tshirt", 6
00300D0909DD, "trousers", 6
00300D0909DE, "tshirt", 1
00300D0909DF, "trousers", 1
00300D0909E0, "trousers", 6
documents
:
0,2015-08-01,"in"
1,2015-08-02,"in"
2,2015-08-03,"out"
3,2015-08-04,"in"
4,2015-08-05,"out"
5,2015-08-06,"in"
doc_pcs
:
0, 1, 00300D0909DA
0, 2, 00300D0909DE
1, 1, 00300D0909DF
1, 2, 00300D0909DD
2, 1, 00300D0909DE
3, 1, 00300D0909DB
4, 1, 00300D0909DF
5, 1, 00300D0909DC
5, 2, 00300D0909E0
给定doc_date=2015-08-04
查询结果(包括字段rfid_no
和item_name
应为:
00300D0909DA, "tshirt"
00300D0909DB, "apron"
00300D0909DD, "trousers"
00300D0909DF, "trousers"
编辑:我已经设法进行以下查询,但它会无休止地执行,因此,我相信有些错误:
SELECT DISTINCT c.rfid_no
FROM itemstock c LEFT JOIN doc_pcs d
ON c.rfid_no=d.rfid_no
WHERE c.status=6
OR
(d.id IN
(SELECT dk.id
FROM documents dk
WHERE DATE(dk.doc_date)>='2015-08-04'
AND dk.doc_type="out")
AND
d.id NOT IN
(SELECT dk.id
FROM documents dk
WHERE DATE(dk.doc_date)>='2015-08-04'
AND dk.doc_type="in"))
似乎您可以从当今的价值出发,然后往后工作,或者您可以从“第0天”开始,然后向前工作。 通过从“今天”开始存储库存数量,您可以对数据进行非规范化,因此我选择了第二种方法(也许您可以为自己保存一张桌子)。
假设从“第0天”开始,所有库存都是空的。 要获取给定日期的库存数量,您可以(p查询):
select sum((select count inbound where date <= inventory_date) - (select count outbound where date <= inventory_date))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.