2017-07-20 10 views
0

Ich versuche eine Liste der Artikel zu erhalten, die auf Lager sind, mit der neuesten bestätigten Lieferzeit, die von unserem Lieferanten angegeben wird. Wenn ich versuche, die Abfrage so zu verwenden, wird jede Vorlaufzeit, die jemals für diesen Gegenstand bestätigt wurde, zurückgegeben. Wie bekomme ich es, um mir nur den letzten zu zeigen?Liste der Artikel mit dem letzten Versanddatum

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

Bestellung dann in absteigender Reihenfolge und wählt nur die ersten (Die Art und Weise kann, abhängig von Datenbank-Software ändern) – litelite

+2

'T3.ShipDate = (SELECT MAX (ShipDate) FROM POR1 WHERE T3.ShipDate = ShipDate) 'macht keinen Sinn für mich. Sollte es nicht irgendwie lesen '.. VON POR1 t4 WHERE T4.U_Bestelcode = t3.U_Bestelcode ' – Serg

Antwort

0

Versuchen Sie diese. Top 1 wählt nur eine Zeile aus, die sich oben befindet. Wenn Sie TOP 2 schreiben, können Sie 2 Daten von oben bekommen.

Für 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; 

Für 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

Die Frage nach dem letzten Datum für * jedes * Element. – dnoeth

0

Durch die Filterung auf WHERE T3.ShipDate = ShipDate Sie gehen einen anderen Termin für jede Zeile in T3 erhalten.

Ich glaube, Sie so etwas wie WHERE T3.Vendor= Vendor wollen das letzte Datum für den Verkäufer finden insgesamt

Offensichtlich hängt von Ihrem DB-Struktur.

0

ändern Sie diesen

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

dazu

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

Die Frage nach dem letzten Datum für * jedes * Element. – dnoeth

+0

Ich habe das mit der TOP 1 Funktion versucht (Weil SQL und nicht MySQL), aber das löst mein Problem nicht, es zeigt jetzt nur 1 Element anstelle der Liste (58 Elemente in meinem Fall) –

Verwandte Themen