我正在尝试确定上次收到库存商品的时间,并且只显示此日期以及每个库存商品,但我还需要提取其他信息,例如仓库名称。
我使用下表:
我的思考过程:
然后我就会陷入困境。
Received_Parts已收到所有部分但没有日期信息。要获取日期信息,我需要通过Received_Parts_ID绑定到Receive_Master。
我原以为我可以通过MAX()函数获取特定PartID的最高receipt_parts_id,然后将其绑定到Receive_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
答案 0 :(得分: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