[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Warum so kompliziert?
    Dieters Lösung ist doch viel einfacher:

    select k1, k2, ..., max(f1), max(f2), ...
    from myfile
    group by k1, k2, ...

    Wenn ich einen Join vermeiden kann, lass ich es auch.
    Ich denke nicht, dass diese Abfrage das gewünschte Ergebnis zurückbringt.
    Beispiel:
    Kunde = 1000, GueltDat = 2016-10-20, F1 = X, F2 = C
    Kunde = 1000, GueltDat = 2016-10-15, F1 = Z, F2 = W
    Kunde = 1000, GueltDat = 2016-10-10, F1 = A, F2 = Z

    Dein Beispiel würde folgendes zurück bringen:
    Kunde = 1000, GueltDat = 2016-10-20, F1 = Z, F2 = Z

    Gewünchst war aber:
    Kunde = 1000, GueltDat = 2016-10-20, F1 = X, F2 = C

    Birgitta
    Birgitta Hauser

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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Du musst du Leute nicht immer mit Abstraktion verwirren:

    "Was mache ich aber wenn ich noch die ganzen Adressdaten(Name2, Str, Plz und Ort) mit
    anzeigen lassen möchte?"

    Mein Verständnis hier ist einfach, dass diese Daten sich beim Kunden nicht ändern, daher reicht Dieters Lösung.
    Hinzu käme bei einer Normalisierung eigentlich ein Join auf den Kundenstamm ohne Datumsbezug und dann reicht auch ein MIN(KDST.Name).
    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
    Mar 2002
    Beiträge
    5.379
    ... am elegantesten wäre es ohnehin neben gültig ab noch gültig bis mit hinzu zu nehmen und beim letzten Higval reinzuschreiben. Wird ein neuer angelegt, muss der alte terminiert werden und ein neuer eingefügt werden (am besten mit Trigger), dann kann man für jedes beliebige Datum mit between den gültigen fischen. Diese Variante ist auch von der Performance bei weitem die Beste, da nur ein Satz gelesen werden muss.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.115
    Hallo *all,

    ich möchte das Thema nochmals aufgreifen:

    Ich habe eine Adressdatei und dazu die Auftragsdaten.

    Ich möchte jetzt jeweils zu dem Kunden den Satz mit dem höchsten Auftragsdatum haben.

    Code:
    with x as (select akkto, max(akkdn1) Datum from kndauf 
               group by akkto)                                      
         select t01.adkto, Datum                                    
           from x join adr01pf t01 on x.akkto = t01.adkto
    Dummerweise bekomme ich jetzt aber folgendes Angezeigt:

    Code:
    1026  20.150.930  
    1026  20.150.930  
    1026  20.150.930  
    1026  20.150.930  
    1026  20.150.930  
    1026  20.150.930  
    1026  20.150.930
    Sprich für jeden Satz in der Auftragsdatei zeigt er mir das höchste Datum an. Ich will es aber nur einmal pro Kunde haben.

    Wo ist mein Denkfehler?

    GG 4847

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Nimm in den Join noch das Datum als Bezug auf. Schließlich ist das ja dieser Satz.
    Sollttest du allerdings mehr als 1 Auftrag für einen Tag haben so musst du ggf. noch den letzten Auftrag dazunehmen.
    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
    Aug 2006
    Beiträge
    2.115
    Versteh ich jetzt nicht wie da die Syntax sein soll.

    GG 4847

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    with x as (select akkto, max(akkdn1) Datum from kndauf
    group by akkto)
    select t01.adkto, Datum
    from x join adr01pf t01 on x.akkto = t01.adkto and x.datum = t01.akkdn1

    Wenn du nur mit dem Konto verknüpfst, bekommst du halt wieder jeden Satz.
    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

  8. #8
    Registriert seit
    Aug 2006
    Beiträge
    2.115
    Zitat Zitat von Fuerchau Beitrag anzeigen
    with x as (select akkto, max(akkdn1) Datum from kndauf
    group by akkto)
    select t01.adkto, Datum
    from x join adr01pf t01 on x.akkto = t01.adkto and x.datum = t01.akkdn1

    Wenn du nur mit dem Konto verknüpfst, bekommst du halt wieder jeden Satz.
    Ich habe mir das fast gedacht.
    In der Kundenauf steht Kundennummer und Auftragsdatum vom Kunden

    1026 22.02.17
    1026 10.01.17
    1026 01.01.17
    8999 22.02.17
    8999 01.02.17

    In der adr01pf steht nur die Kundennummer und Adresse.

    Bei meiner Funktion bekomme jetzt 1026 3 mal angezeigt, aber mit dem Datum 22.02.17.

  9. #9
    Registriert seit
    Nov 2003
    Beiträge
    2.422
    Vielleicht gibt's den Kunden mehrmals in der Adreßdatei?

    SELECT * FROM ADR01PF WHERE ADKTO=1026

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Die Dateifolge ist falsch.
    Was ist deine Primary Tabelle?

    with x as (select akkto, max(akkdn1) Datum from kndauf
    group by akkto)
    select * from x

    liefert dir je akkto das letzte Datum aus KNDAUF.
    Somit ist dies wieder deine Primary

    with x as (select akkto, max(akkdn1) Datum from kndauf
    group by akkto)
    select * from x
    inner join kndauf k on x.akkto=k.akkto and x.datum=k.akkdn1

    hier kannst du dann gerne nochden Kundenstamm anhängen:

    with x as (select akkto, max(akkdn1) Datum from kndauf
    group by akkto)
    select * from x
    inner join kndauf k on x.akkto=k.akkto and x.datum=k.akkdn1
    inner join adr01pf a on x.akkto = a.adkto
    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

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.115

    Reihenfolge

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Die Dateifolge ist falsch.
    Was ist deine Primary Tabelle?


    hier kannst du dann gerne nochden Kundenstamm anhängen:

    with x as (select akkto, max(akkdn1) Datum from kndauf
    group by akkto)
    select * from x
    inner join kndauf k on x.akkto=k.akkto and x.datum=k.akkdn1
    inner join adr01pf a on x.akkto = a.adkto
    Genau das war das Problem.

    Danke Dir. Dir Problematik ist das ich bei weiteren Dateien die ich noch lesen muß jeweils mehrere Ausprägungen habe wo ich eigentlich auch immer nur den ersten Satz bräuchte.
    Das heißt ich müßte da auch eine cte machen.

    Muß ich mal prüfen....

    GG 4846

Similar Threads

  1. XML-Workshops für iSeries Kunden von IBM, Software AG + Magic, ab 10.10.02
    By Kirsten Steer in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 02-09-02, 11:25
  2. SDA: Std Drucker im Menü anzeigen lassen?
    By Koelch400 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-08-02, 10:53
  3. Antworten: 0
    Letzter Beitrag: 04-06-02, 14:04
  4. Antworten: 10
    Letzter Beitrag: 23-01-02, 15:02
  5. FRIDA-Anwendertreffen Outside 2001 lockt 80 Kunden nach Hamburg
    By RM Haaßengier in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 22-10-01, 12:18

Tags for this Thread

Berechtigungen

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