2017-07-20 41 views
0

我试图获得订单的库存商品列表,以及供应商给出的最新确认交货时间。如果我尝试使用这样的查询,它会返回该项目已经确认的每个提前期。我怎样才能让它只显示最后一个?上一个发货日期的商品列表

SELECT 

T0.DocNum AS Order, 
T1.ItemCode AS Item, 
T2.U_Internal_Code AS IntItem, 
CAST (((T2.onhand+T2.OnOrder)-T2.IsCommited) as int) AS Stock, 
T3.ShipDate 

FROM 

ORDR T0 

INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry 
INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode 
INNER JOIN POR1 T3 ON T2.U_Bestelcode = T3.U_Bestelcode 

WHERE T0.DocNum='1234' AND T3.ShipDate=(SELECT MAX (ShipDate) FROM POR1 WHERE T3.ShipDate = ShipDate) 

ORDER BY T1.ItemCode 
+0

订购然后在由高到低的顺序,只挑选的第一个(取决于您的数据库软件的方式可能会发生变化) – litelite

+2

'T3.ShipDate = (SELECT MAX(ShipDate)FROM POR1 WHERE T3.ShipDate = ShipDate)'对我没有意义。它不应该读''从POR1 t4哪里T4.U_Bestelcode = t3.U_Bestelcode' – Serg

回答

0

试试这个。排名第一的只有一排排在最前面。如果你写TOP 2,你可以从顶部获得2个数据。

对于SQL

SELECT TOP 1 

T0.DocNum AS Order, 
T1.ItemCode AS Item, 
T2.U_Internal_Code AS IntItem, 
CAST (((T2.onhand+T2.OnOrder)-T2.IsCommited) as int) AS Stock, 
T3.ShipDate 

FROM 

ORDR T0 

INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry 
INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode 
INNER JOIN POR1 T3 ON T2.U_Bestelcode = T3.U_Bestelcode 

WHERE T0.DocNum='1234' AND T3.ShipDate=(SELECT MAX (ShipDate) FROM POR1 WHERE T3.ShipDate = ShipDate) 

ORDER BY T1.ItemCode DESC; 

对于MySQL

SELECT 

    T0.DocNum AS Order, 
    T1.ItemCode AS Item, 
    T2.U_Internal_Code AS IntItem, 
    CAST (((T2.onhand+T2.OnOrder)-T2.IsCommited) as int) AS Stock, 
    T3.ShipDate 

    FROM 

    ORDR T0 

    INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry 
    INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode 
    INNER JOIN POR1 T3 ON T2.U_Bestelcode = T3.U_Bestelcode 

    WHERE T0.DocNum='1234' AND T3.ShipDate=(SELECT MAX (ShipDate) FROM POR1 WHERE T3.ShipDate = ShipDate) 

    ORDER BY T1.ItemCode DESC 
    LIMIT 1; 
+0

该问题询问*每个*项目的最后日期。 – dnoeth

0

通过筛选上WHERE T3.ShipDate = ShipDate你要获得在T3各行不同的日期。

我想你想要像WHERE T3.Vendor= Vendor找到总

显然依赖于供应商的最新更新你的数据库结构。

0

更改此

WHERE T0.DocNum='1234' AND T3.ShipDate=(SELECT MAX (ShipDate) FROM POR1 WHERE T3.ShipDate = ShipDate) 
ORDER BY T1.ItemCode 

这个

WHERE T0.DocNum='1234' 
ORDER BY T3.ShipDate DESC, T1.ItemCode 
limit 1 
+0

问题询问*每个*项目的最后日期。 – dnoeth

+0

我已经尝试过与TOP 1函数(因为SQL而不是MySQL),但这并不能解决我的问题,它现在只显示1项而不是列表(在我的情况下是58项) –