Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将一个表中的值与另一个表中的最高值相匹配,以从另一个表中提取日期_Sql_Sql Server - Fatal编程技术网

SQL将一个表中的值与另一个表中的最高值相匹配,以从另一个表中提取日期

SQL将一个表中的值与另一个表中的最高值相匹配,以从另一个表中提取日期,sql,sql-server,Sql,Sql Server,我试图确定最后一次收到库存物品的时间,只显示每个库存物品的日期,但我还需要提取其他信息,如仓库名称 我使用以下表格: 库存:包含库存盘点 零件信息:包含零件信息(描述、仓库标识符) 仓库信息:包含仓库名称 已收零件:包含所有已收零件的日记账,但没有日期信息 接收\u Master:根据接收ID包含接收零件的日期 我的思考过程: 按PartID将库存加入零件信息:这将提供零件的详细信息、名称和描述 通过WarehouseID将库存加入仓库信息:这将获得仓库名称 这就是我被卡住的地方 已接收

我试图确定最后一次收到库存物品的时间,只显示每个库存物品的日期,但我还需要提取其他信息,如仓库名称

我使用以下表格:

  • 库存:包含库存盘点
  • 零件信息:包含零件信息(描述、仓库标识符)
  • 仓库信息:包含仓库名称
  • 已收零件:包含所有已收零件的日记账,但没有日期信息
  • 接收\u Master:根据接收ID包含接收零件的日期
我的思考过程:

  • 按PartID将库存加入零件信息:这将提供零件的详细信息、名称和描述
  • 通过WarehouseID将库存加入仓库信息:这将获得仓库名称
这就是我被卡住的地方

已接收的零件包含所有已接收的零件,但没有日期信息。要获取日期信息,我需要通过接收的\u零件\u ID绑定到接收\u主控

我在想,我可以通过MAX()函数获取特定PartID的最高Receive\u parts\u id,然后将其绑定到Receive\u Master以提取特定条目的日期

不幸的是,我所做的每一次加入尝试都失败了

以下是我的最新尝试:

   select 
  a.*,
  b.*,
  c.*,
  d.*,
  e.*
FROM dbo.IN_Inventory a
    LEFT OUTER JOIN dbo.IN_Part b
        ON a.Part_Id = b.part_id
    LEFT OUTER JOIN IN_Warehouse c
        ON a.Warehouse_Id = c.Warehouse_Id
    INNER JOIN IN_Receipt_Parts d
        ON a.Part_Id = d.Part_Id
    INNER JOIN
    (
        SELECT part_id, receipt_id, MAX(receipt_parts_id) maxReceipt
        FROM IN_Receipt_Parts
        GROUP BY Part_Id
    ) e ON d.Part_Id = e.Part_Id AND d.Receipt_Parts_Id = e.maxReceipt
    LEFT OUTER JOIN IN_Receipt f
        ON e.Receipt_Id = f.Receipt_Id
WHERE
    a.On_Hand_New > 0

我认为这就是您所追求的(您可以从派生表中获得日期)。将“DateField”替换为要查找的日期列。我认为你在最近的尝试中没有提到

             select 
  a.*,
  b.*,
  c.*,
  e.*
FROM dbo.IN_Inventory a
    LEFT OUTER JOIN dbo.IN_Part b
        ON a.Part_Id = b.part_id
    LEFT OUTER JOIN IN_Warehouse c
        ON a.Warehouse_Id = c.Warehouse_Id
    INNER JOIN
    (
         SELECT p.part_id, m.DateField, Row_Number() OVER (PARTITION BY p.Part_Id ORDER BY m.DateField DESC) RowNumber
        FROM IN_Receipt_Parts p INNER JOIN 
            IN_Receipt  m ON p.receipt_id=m.Receipt_ID 
    ) e ON e.part_id=a.Part_id and RowNumber=1
WHERE
    a.On_Hand_New > 0

您能用一些示例数据编写表模式的脚本吗?我可以在本地机器上运行它来测试这个sql server或MySql?它们不是同一件事,答案可能非常重要。向我们展示您的尝试,我们可能会帮助您解决问题。这是SQL Server,很抱歉,我认为我已正确标记了它(我刚刚修复了它)。到目前为止,我尝试了以下内容:好的,不知道如何在评论中发布sql脚本:(这拖了大约20倍多的行,看起来好像是在为收据中的每个数量项目拖一行。啊,我看到了我在您对收据中的部分(别名d)的引用中留下的问题。您需要从该表中获得的任何内容都应添加到派生表中。我已编辑了我的答案以删除该行,但您需要添加任何所需的add'l列。(因为我不知道所有的*s,你需要哪些。