[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    5

    SQL Mengensummen eines Artikels vom aktuellsten Datum

    Hallo zusammen!

    Ich habe hier eine riesige Lagerbewegungsdatei und bräuchte jeweils die Summe der bewegten Mengen des jeweiligen Artikels vom aktuellsten Buchungsdatum.


    Artikel-Nr Datum Menge
    500023 09.09.2014 20000
    500023 09.09.2014 3750
    500023 07.05.2014 1200
    500011 08.09.2014 200
    500011 07.04.2014 4000
    500011 03.03.2014 2500

    Das Ergebnis sollte dann so aussehen:


    Artikel-Nr Datum Menge
    500023 09.09.2014 23750
    500011 08.09.2014 200


    So bald ich mit MAX und SUM-Argumenten gleichzeitig arbeite, bekomme ich immer die Summe aller Mengen, unabhängig vom aktuellsten Datum. Im Fall von Artikel 500023 vom 09.09.2014 erhalte ich also 24950.

    Mein Denkansatz ist dabei folgendermaßen:
    SELECT Artikel-Nr, MAX(Datum), SUM(Menge) FROM Tabelle
    GROUP BY Artikel-Nr

    Was mache ich dabei falsch?

    Gruß, Harry72

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Du bekommst eben das was da steht, Summe je Artikel und das letzte Datum.
    Hier musst du einschränken:

    Select a.Artikel, max(a.Datum), sum(a.Menge) from Tabelle a
    inner join (select Artikel, max(Datum) as Datum from Tabelle b Group by Artikel) b on a.Datum=b.Datum
    Group by a.Artikel
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Apr 2005
    Beiträge
    5
    Funktioniert leider nicht so wie erhofft.
    Wenn ich wie vorgeschlagen im on "b.Datum" schreibe, dann erscheint folgender Fehler:
    Spalte Datum nicht in Tabelle B in *N.

    Daraufhin hab ich das b. vor dem Feld Datum entfernt.
    Der SQL sieht jetzt so aus:

    SELECT A.Artikel-Nr, max(a.Datum), SUM(a.Menge)
    FROM Tabelle A
    INNER JOIN
    (SELECT Artikel-Nr, MAX(Datum) AS Datum from Tabelle b
    GROUP BY Artikel-Nr)
    B ON A.Datum=Datum and
    a.Artikel-Nr = b.Artikel-Nr
    WHERE A.Artikel-Nr = '500023'
    GROUP BY A.Artikel-Nr
    order by a.Artikel-Nr


    Leider erhalte ich jetzt wieder die Summe des Feldes Menge aller Datensätze von 500023.
    Ich möchte aber nur die Summe der Datensätze Menge mit dem höchsten Datum.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Das SQL-Statement muss wie folgt aussehen:

    Code:
    With x as (Select ArtikelNr, Max(Datum) Datum
                 from Tabelle 
                 Group By ArtikelNr)
    Select x.ArtikelNr, x.Datum, Sum(Menge)
    From x join Tabelle a on     x.ArtikelNr = a.ArtikelNr 
                             and x.Datum = a.Datum
    Group By x.ArtikelNr, x.Datum
    oder

    Code:
    Select x.ArtikelNr, x.Datum, Sum(Menge)
    From (Select ArtikelNr, Max(Datum) Datum
            From Tabelle
            Group By ArtikelNr) x 
          Join Tabelle a on     x.ArtikelNr = a.ArtikelNr
                            and x.Datum     = a.Datum)
    Group By x.ArtikelNr, x.Datum
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    @Birgitta
    Das stimmt so nicht. Es muss ein "Inner Join" her, damit die Einschränkung auf das letzte Datum passiert. Ohne "inner" wird ein Left join daraus und ich erhalte auch die Summen der anderen Daten und nicht nur des letzten Datums.

    Ein Endgruppierung auf das Datum ist nicht erforderlich. Ein Group by Datum oder max(Datum) muss das selbe Ergebnis bringen.

    Bei meinem obigen Beispiel fehlt nur der " on a.artikel = b.artikel and ...".
    Wir machen das schon häufiger so.


    Der SQL

    SELECT
    A.Artikel-Nr,
    max(a.Datum),
    SUM(a.Menge)

    FROM Tabelle A

    INNER JOIN

    (SELECT
    Artikel-Nr,
    MAX(Datum) AS Datum
    from Tabelle b
    GROUP BY Artikel-Nr) B
    ON A.Datum = B.Datum
    and a.Artikel-Nr = b.Artikel-Nr

    WHERE A.Artikel-Nr = '500023'

    GROUP BY A.Artikel-Nr
    order by a.Artikel-Nr

    sollte eigentlich richtig sein.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    @Birgitta
    OK, ich nehm's zurück.
    Anders herum geht's natürlich auch.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Nur zur Info: INNER JOIN und JOIN ist das Gleiche!
    Das kannst Du auch gerne in der SQL Referenz nachlesen:
    "If a join operator is not specified, INNER is implicit."
    Für einen LEFT JOIN muss LEFT explizit angegeben werden.

    Meine beiden Statements waren absolut korrekt.
    Ich hab' auch schon das eine oder andere SQL-Statement abgesetzt und außerdem probiere ich meine Statements i.d.R. aus bevor ich sie poste.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. Datum die xte + 1 SQL V5R4
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 25-07-14, 15:45
  2. Berechtigung eines IFS-Orders
    By dino in forum IBM i Hauptforum
    Antworten: 16
    Letzter Beitrag: 27-11-13, 13:32
  3. Datum berechnen mit CL
    By j.k. in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 15-11-10, 16:31
  4. SAv eines W2K Servers
    By PS in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 09-02-03, 10:33
  5. Datum + 10 Tage in RPG
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 06-08-01, 14:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •