[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    86

    Post SQL - Höchsten Datumswert eines Kunden anzeigen lassen

    Servus,

    ich möchte aus einer Kundendatei pro Kunde den höchsten Datumswert anzeigen lassen.
    Kunde kann mehrere Einträge haben. GADAT ist "gültig ab" Datumsfeld.

    Bei dem Bsp. bekomme ich das ja noch hin mit Max(GADAT) und GROUP auf Kdnr.
    Was mache ich aber wenn ich noch die ganzen Adressdaten(Name2, Str, Plz und Ort) mit
    anzeigen lassen möchte?

    Bsp.

    Kdnr GADAT
    701350 2008/07
    701350 2010/12
    701350
    701450 2012/05
    701450 2017/01

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... wenn denn Deine Kdnr primary key ist, kannst Du einfach max(xxx) oder MIN(xxx) nehmen.

    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/

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Sofern im Datensatz noch andere Informationen enthalten sind, die Du sehen willst ...
    Ermittle die eindeutigen Schlüssel-Daten und das höchste Datum in einer CTE (Common Table Expression) oder verschachtelten Select-Anweisung und verknüpfe das Ergebnis über den Unique Key (z.B. Kunden-Nr.) und das Datum mit dem eigentlichen Datensatz.
    Bei einen zusammengesetzten Schlüssel, musst Du natürlich auf diesen zusammengesetzten Schlüssel verdichten.

    Code:
    With x as (Select  KundeNr, Max(GueltDat) MaxDat
               From YourTable
               Where ....
               Group By KundeNr)
    Select a.*
       From x join YourTable a on x.KundeNr = a.KundeNr and MaxDat = GueltDat
    ...
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    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

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Und wenn ein Kunde umzieht?

    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.

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... 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/

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    2.074
    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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.074
    Versteh ich jetzt nicht wie da die Syntax sein soll.

    GG 4847

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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

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
  •