Fehlende Aggregatfunktionen MAX

"SELECT daten.*,
journal.PostingNo, journal.ItemNo, journal.TotalQuantity
FROM daten,journal
LEFT JOIN journal
ON journal.PostingNo =
(SELECT max(PostingNo) AS maxPostingNo, ItemNo
FROM journal
GROUP BY ItemNo) lastPost.ItemNo";

Mir fehlt das Verständnis dafür, wie man die zum Ergebnis (lastPost.ItemNo) passende Datensätze als LEFT JOIN - Bedingung (ON) einfügt!
Alle Howtos (Google) nehmen das Max()-Ergebnis als Filterbedingung, welche für Datensätze in der Haupt-SELECT steht.
Ich statdessen suche das Max()-Ergebnis um den Jeweiligen Datensatz aus dem Neben-SELECT, als LEFT JOIN zum Haupt-SELECT hinzu zu fügen.

Mfg AngstHab
 
Werbung:
Und ich verstehe weder deine Tabellenstruktur noch dein (wieder syntaktisch fehlerhaften) Ausgangscode noch deine Beschreibung. Daher rate ich jetzt mal
Code:
SELECT    daten.*,
        journal.PostingNo,
        journal.ItemNo,
        journal.TotalQuantity,
        lastPost.maxPostingNo
FROM    daten,
        journal
LEFT JOIN    (    SELECT    max(PostingNo) AS maxPostingNo,
                        ItemNo
                FROM    journal
                GROUP BY ItemNo ) lastPost
ON        lastPost.ItemNo = journal.ItemNo
WHERE    daten.ItemNo = journal.ItemNo
 
Code:
daten
|auftragno 
|itemno
|bezeichung
 
journal
|postingno 
|itemno
|totalquantity
|änderungsdatum
Die beiden Tabellen sollen zusammengefügt werden.
Ich brauche aus der Tabelle journal die Menge (totalquantity) mit dem neusten Datum, also die aktuellste.
Leider geht das per Datetime(Änderungsdatum) nicht weil mehrer Buchungen per Sekunde laufen (Menge ändert sich damit auch Sekündlich) und eine 1:n Beziehung enstehen würde.
Die PostingNo ist ein Zähler der Buchungen, wenn ich also den Größten Wert je itemno und die in dem Datensatz vorhandene Menge (totalquantity) nehme sollte es funktionieren.
 
Zuletzt bearbeitet:
Code:
SELECT    daten.*,
        (    SELECT    totalquantity
            FROM    journal
            WHERE    itemno = daten.itemno
            AND        ROWNUM = 1
            ORDER BY postingno DESC ) AS totalquantity
FROM    daten
 
Er mag
"ORDER BY postingno DESC" nicht!
Scheint dier falsche Reihenfolge zu sein!

ORA-00907: missing right parenthesis

Nochmal extra Klammern und das ROWNUM über das Order BY anwenden?
 
Ich weiss nicht wie das mit ROWNUM bei Oracle geht, ich nutze MSSQL und da gibt es nur TOP. Wenn dem so ist kann man es nochmal verschachteln.
 
Code:
$query = "SELECT * 
                   FROM( SELECT PostingNo, ItemNo, TotalQuantity
                                  FROM Journal
                                  ORDER BY PostingNo DESC)
                  WHERE ROWNUM = 1";
 
Tja, funktioniert leider bei Oracle nicht!

"No, Oracle doesn't correlate the subqueries nested more than one level deep (and neither does MySQL)."
....
 
Code:
SELECT    t.*,
        j2.totalquantity
FROM    (
SELECT    d.*,
        max(j1.postingno) AS postingno
FROM    daten d
LEFT JOIN journal j1
ON        d.itemno = j1.itemno
) t
LEFT JOIN journal j2
ON        t.itemno = j2.itemno
AND        t.postingno = j2.postingno
 
Werbung:
Danke schön, habs aber anders gelöst!

Code:
SELECT   daten.*,
                  lastPost.*
       FROM    relFB
       LEFT JOIN    (SELECT ItemNo, TotalQuantity, PostingNo
             FROM Journal
             WHERE (PostingNo,ItemNo)
               IN (
               SELECT MAX(PostingNo) AS PostingNo, ItemNo AS ItemNo
               FROM Journal
               GROUP BY ItemNo
                 )
             ORDER BY ItemNo) lastPost
       ON    (lastPost.ItemNo = daten.ItemNo)

Das Problem bei Oracle ist wirklich die Handhabung in solchen Sachen. Die größte Hürde ist das Daten nur innerhalb einer Subquery übernommen werden können, bei der "Sub-Subquery" kommt nichts aus der Hauptquery (ROWNUM nicht verwendbar) an und Limit gibt es bis zur Oracle 12 nicht gibt.
 
Zurück
Oben