2017-08-29 3 views
0

Ich ziehe Informationen aus einer SQL-Datenbank, aber es zeigt alle Zeilen aufgrund mehrfacher Updates mehrmals an. Ich habe es geschafft, doppelte mit der distinct-Funktion zu eliminieren, zeigt jedoch immer noch mehrere Zeilen für die Änderungen.SQL Letzte aktualisierte Zeile

dh

original Qty = 4
Update 1 Qty = 5
Update 2 Qty = 6

Ich will nur die jüngste Aktualisierung der jede Zeile, die Spalte OLLNID

SELECT DISTINCT 
    OLMCU, 
    OLKCOO, 
    OLDOCO, 
    OLDCTO, 
    Date(OLTRDJ, CYYDDD) AS OLTRDJ, 
    OLLNID AS OLLNID_1, 
    OLDSC1, 
    OLDSC2 AS OLDSC2_1, 
    OLUOM, 
    OLUORG, 
    OLPRRC, 
    OLAEXP, 
    OLANBY 
FROM 
    E1PDES01.PRODDTA.F43199 F43199 
WHERE 
    OLMCU = '13248' 
    AND Date(OLTRDJ, CYYDDD) >= '01/01/2017' 
    AND OLDCTO = 'OP' 
    AND OLDOCO = 13484379 
ORDER BY 
    6 
+1

welcher Geschmack von SQL? – scsimon

+1

ORDER BY Ordinalposition ist seit dem letzten Jahrtausend veraltet. (1992?) Stattdessen 'ORDER BY OLLNID_1'. – jarlh

+0

DISTINCT ist keine Funktion. Es ist ein Teil von 'SELECT DISTINCT' und arbeitet mit allen ausgewählten Zeilen. – jarlh

Antwort

0

Wie subkonstrukt ich bin zu raten, was Sie wirklich wollen. Wenn Sie die letzten Ergebnisse von OLLNID (die dann z. B. ein Datum ist) möchten, dann könnten Sie nach allen anderen Werten gruppieren (wenn sie sich unterscheiden) und die maximale OLLNID auswählen.

SELECT 
    OLMCU, 
    OLKCOO, 
    OLDOCO, 
    OLDCTO, 
    Date(OLTRDJ, CYYDDD) AS OLTRDJ, 
    MAX(OLLNID) AS OLLNID_1, 
    OLDSC1, 
    OLDSC2 AS OLDSC2_1, 
    OLUOM, 
    OLUORG, 
    OLPRRC, 
    OLAEXP, 
    OLANBY 
FROM E1PDES01.PRODDTA.F43199 F43199 
WHERE OLMCU = '13248' 
     AND Date(OLTRDJ, CYYDDD) >= '01/01/2017' 
     AND OLDCTO = 'OP' 
     AND OLDOCO = 13484379 
GROUP BY 
    OLMCU, 
    OLKCOO, 
    OLDOCO, 
    OLDCTO, 
    OLTRDJ, 
    OLDSC1, 
    OLDSC2, 
    OLUOM, 
    OLUORG, 
    OLPRRC, 
    OLAEXP, 
    OLANBY; 
0

je nachdem, was SQL Flavor Sie verwenden, funktioniert dies möglicherweise nicht, auch ich habe einige wilde Annahmen über Ihre Daten gemacht ein so könnte, wenn Sie weitere Informationen (möglicherweise schema/Typen, SQL Flavor, vielleicht zwei oder drei Dummy-Zeilen) liefern werde ich meine Antwort bearbeiten

SELECT 
    org.OLMCU, 
    org.OLKCOO, 
    org.OLDOCO, 
    org.OLDCTO, 
    Date(org.OLTRDJ, CYYDDD) AS OLTRDJ, 
    org.OLLNID AS OLLNID_1, 
    org.OLDSC1, 
    org.OLDSC2 AS OLDSC2_1, 
    org.OLUOM, 
    org.OLUORG, 
    org.OLPRRC, 
    org.OLAEXP, 
    org.OLANBY 
FROM 
    E1PDES01.PRODDTA.F43199 F43199 as org 
LEFT OUTER JOIN E1PDES01.PRODDTA.F43199 F43199 aux ON org.OLLNID = aux.OLLNID AND org.OLLNID < aux.OLLNID 
WHERE 
    org.OLMCU = '13248' 
    AND Date(org.OLTRDJ, CYYDDD) >= '01/01/2017' 
    AND org.OLDCTO = 'OP' 
    AND org.OLDOCO = 13484379 
    AND aux.OLLNID IS NULL 
GROUP BY 
    org.OLMCU, 
    org.OLKCOO, 
    org.OLDOCO, 
    org.OLDCTO, 
    Date(org.OLTRDJ, CYYDDD) AS OLTRDJ, 
    org.OLLNID AS OLLNID_1, 
    org.OLDSC1, 
    org.OLDSC2 AS OLDSC2_1, 
    org.OLUOM, 
    org.OLUORG, 
    org.OLPRRC, 
    org.OLAEXP, 
    org.OLANBY 
ORDER BY org.OLLNID 
Verwandte Themen