繁体   English   中英

查询显示过去给定日期的库存

[英]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

第一个表用于收集项目的记录,从该表中不会删除任何内容,当特定项目发生某些事情时(只是返回给客户,再回来等),状态只是变化。

Documentsdoc_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_noitem_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM