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