我正在开发仓库管理软件。
我有三张桌子:itemstock, documents, doc_pcs
itemstock字段(并非所有字段都显示):
rfid_no (它是唯一的主键)item_namestatusdocuments字段:
iddoc_datedoc_typedoc_pcs字段:
idid_doc \\这两个是主键pos @ (id_doc连接到documents.id)rfid_no (来自itemstock.rfid_no)第一个表用于收集项的记录,这个表中没有任何内容被删除,只有当特定项发生时(发送到客户端,返回等等),状态就会发生变化。
Documents和doc_pcs表存储文档数据。
doc_type是用来标记文档上的项目是进出仓库的。
问题是:我需要创建显示给定日期的所有股票的查询。
换句话说,它应该显示从今天的itemstock到status=6 (“存储”)减去rfid_no的所有项目,这些记录在doc_pcs中有匹配的日期从今天到给定日期之间的日期,以及与doc_type="out" +E 255记录有rfid_no中与doc_pcs相关的与D58相关的匹配项,从今天到给定日期,并与doc_type="in"匹配。
几天来,我一直在寻找任何线索,但我找不到任何能让我找到任何解决方案的方法。我将感激任何帮助!
样本数据:
itemstock (截至今天):
00300D0909DA, "tshirt", 6
00300D0909DB, "apron", 6
00300D0909DC, "tshirt", 6
00300D0909DD, "trousers", 6
00300D0909DE, "tshirt", 1
00300D0909DF, "trousers", 1
00300D0909E0, "trousers", 6documents
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"))发布于 2015-08-20 12:04:37
看起来,你可以从今天的价值观出发,向后工作,也可以从“第0天”开始,向前迈进。通过存储截至“今天”的股票计数,您将对数据进行反错处理,因此我将选择第二种方法(也许您可以为自己保留一个表)。
假设从‘第0天’开始,所有股票都是空的。要获得给定日期的股票计数,您需要(p-query):
select sum((select count inbound where date <= inventory_date) - (select count outbound where date <= inventory_date))https://stackoverflow.com/questions/32117315
复制相似问题