[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Apr 2009
    Beiträge
    41

    Letzter Satz in einem PF mit QUERY auslesen

    hallo forum, bestimmt schon 1'000'000 mal gefragt und selber auch ungefähr genauso oft gemacht! sorry, aber derzeit habe ich einen ganzen bretterwald vorm kopf: ich habe eine PF und möchte den lezten (=aktuellsten satz) auslesen und in einer späteren datei weiterverarbeiten. ich habe das aktuelle datum und das datum des buchungssatzes im pf - und jetzt???? wie komme ich an den letzten, sprich aktuellsten satz? ich brauche NUR den letzten, aktuellsten satz für die weitere pf. mir schwirrt irgendwas mit MIN und MAX im kopf 'rum, krieg es aber nicht mehr hin... HILFE!!!! danke!
    __________________________________
    AS/400 eSeries Modell 150

  2. #2
    Registriert seit
    May 2007
    Beiträge
    295
    Guten Morgen,

    mit Query kenn ich mich nicht so gut aus aber mittels SQL ginge es u.a. so:
    Code:
    WITH R_MAX (RECNR) AS (SELECT MAX(RRN(A)) FROM TABLE A)
    SELECT * FROM TABLE B JOIN R_MAX ON (RRN(B) = RECNR)
    MfG
    Christian
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    ich nehme an Du redest von Query/400 und nicht von SQL.

    Die Funktionen MIN() und MAX() sind SQL-Funktionen und können in Query/400 nicht direkt verwendet werden.

    Minimal- und Maximal-Werte können im Query/400 über die Summen-Funktionen ermittelt werden.
    Um den kompletten Datensatz zu erhalten, musst Du dann in einem weiteren Query das Ergebnis aus der Min/Max-Abfrage mit der Original-Datei verknüpfen.
    (Gleiches gilt auch für SQL, nur da kann man so etwas in einem einzigen Statement, entweder mit einem Sub-Select oder Common Table Expression lösen. Das SQL-Statement könnte man allerdings auch als View abspeichern und dann im Query/400 verwenden)

    Da ich Deine Anforderungen nicht genau kenne, könnte für Deine Belange evtl. auch eine schnöde absteigende Sortierung ausreichen.

    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

  4. #4
    Registriert seit
    Apr 2009
    Beiträge
    41

    @ birgitta

    hallo birgitta, ja genau, so etwas ähnlich schwirrt mit auch (noch) im kopf herum. um es ein wenig deutlich zu machen, hier ein beispiel:

    DATUM DAYS1 KREDITOR ZAH.-DAT. DAYS2 AUFTRAG AZ.-NR. DAYS3 DAYS4
    08.06.09 733.566 7.011.036 05.01.2009 733.412 1.113 0103/09 154 1.466.978
    08.06.09 733.566 7.011.036 26.01.2009 733.433 919.240 9999/99 133 1.466.999
    08.06.09 733.566 7.011.036 31.01.2009 733.438 919.261 9999/99 128 1.467.004
    08.06.09 733.566 7.011.036 05.02.2009 733.443 2.113 0304/09 123 1.467.009
    08.06.09 733.566 7.011.036 04.03.2009 733.470 3.113 0506/09 96 1.467.036
    08.06.09 733.566 7.011.036 06.04.2009 733.503 4.113 0704/09 63 1.467.069
    08.06.09 733.566 7.011.036 05.05.2009 733.532 5.113 0902/09 34 1.467.098

    und ich brauche "nur" den satz, mit der auftrags-nr. 5113, sprich den letzten und somit den aktuellsten. das ist der satz, der im vergleich mit dem aktuellen datum (in tagen = DAYS1) die wenigsten tage (DAYS3 = 34) oder die meisten (DAYS4 = 1'467'098) hat. kannst du mir folgen und evtl. sogar helfen???? dankeschön!!!

    gruß und schon 'mal DANKE, Q_SYS
    __________________________________
    AS/400 eSeries Modell 150

  5. #5
    Registriert seit
    Jul 2001
    Beiträge
    177
    Hallo Qsys,

    statt Query kannst du ja evtl. CPYF nehmen....

    zunächst mußt die die Anzahl Sätze in der Datei ermitteln
    RTVMBRD NBRCURRCD(&MAXREC)

    und dann den letzten Satz aus der Datei in einer temp-Datei kopieren
    CPYF FROMRCD(&MAXREC)

    Grüße

    Andi Göring

  6. #6
    Registriert seit
    Apr 2009
    Beiträge
    41

    @andi

    der gedanke ist toll, wenn es sich nur um (hier in dem konkreten PF) 1 kreditor je PF handeln würde. in diesem file sind aber ALLE kreditoren enthalten, mit ALLEN buchungen, respektive zahlungen. ich brauch' also den letzten satz je kreditor. deshalb scheidet a. m. s. eine CPYF aus, oder?
    __________________________________
    AS/400 eSeries Modell 150

  7. #7
    Registriert seit
    Jul 2001
    Beiträge
    177
    sorry, da habe ich die Anforderung nicht ganz verstanden.

    Man könnte jetzt hingehen und einen weiteren CPYF vorschalten mit Selektion auf den Debitor.

    Aber mit so einer Lösung möchte ich nicht in Verbindung gebracht werden ;-)

    Eleganter ist sicherlich ein auf SQL basierende Lösung, evtl. SQL-RPG...

    Grüße

    AG

  8. #8
    Registriert seit
    Apr 2009
    Beiträge
    41

    @andi

    genau, solch perverse dinge auf meiner maschine will ich auch nicht haben ;-)

    ich glaub' ja immer noch, dass mein gedanke, das über QUERY/400 mit MIN und MAX auszuwerten, nicht ganz verkehrt ist. aber mir felt noch der genaue weg dorthin. vielleicht kann ja birgitta helfen, die weiß immer alles, was sich um QUERY, SQL & Co. dreht...
    __________________________________
    AS/400 eSeries Modell 150

  9. #9
    Registriert seit
    Jul 2001
    Beiträge
    177
    Schau dir mal SQL-RPG an, du findest dazu bestimmt hier im Forum oder sonst über google hinweise dazu, z.b. http://publib.boulder.ibm.com/infoce...rzajpssrpg.htm

  10. #10
    Registriert seit
    Apr 2009
    Beiträge
    41

    .

    jetzt disqualifiziere ich mich geich selber: ich habe auf meiner maschine a.) keinen RPG-compiler und b.) kann ich auch kein RPG... sorry!
    ich muss das entweder mittels QUERY/400 lösen oder mit einem, für mich verständlichen SQL-statement, dass in einem CL eingebunden wird. so löse ich derzeit schon einige logik-prüfungen (z. b. wenn 'barzahlung' gebucht wurde, dann darf auch nur das kassen-konto bebucht werden und umgekehrt!) ich weiß wohl, dass das sehr "schmutzig" ist, aber es funktioniert! quick-and-dirty eben!
    __________________________________
    AS/400 eSeries Modell 150

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Vorausgesetzt, dass Du pro Days1 und Kreditor den Satz mit dem Minimalen Days3-Wert und dem Maximalen Days4-Wert suchst, und außerdem der Minimale Days3 und der Maximale Days4-Wert immer im gleichen Satz liegen, kannst Du Dir die folgende View bauen (unter STRSQL oder in eine Quelle kopieren und einmalig mit RUNSQLSTM ausführen). Z.Info eine View ist eine "logische" Datei ohne Zugriffsweg und kann im Query/400 wie eine physische Datei verwendet werden.

    View: ermitteln Tag, Kreditor, Minimaler Days3 und Maximaler Days4-Wert
    PHP-Code:
    Create View MyLib/MyView as
    Select Days1KreditorMin(Days3Min3Max(Days4Max4
       from mydays                                          
       group by Days1
    Kreditor 
    Diese View kannst Du dann im Query/400 verwenden.
    Im Query/400 verknüpfst Du diese View mit der Original-Datei über Days1, Kreditor, Min3=Days3 und Max3=Days4.
    Damit erhälst Du jeweils den (kompletten) Satz pro Days1, Kreditor mit dem Minimalen Day3 und dem Maximalen Days4-Wert.
    Du brauchst dann nur noch im Query den Kreditor oder das Datum auswählen, wie Du es zurvor auch schon gemacht hast.

    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

  12. #12
    Registriert seit
    Apr 2009
    Beiträge
    41

    @birgitta

    JUHU!!!!!!!!!!! das hat super funktioniert! ich bin einen riesen schritt weiter, und die lösung, so mit VIEW & co. gefällt mir sehr gut!!!! dankeschön!
    ein kleines problem habe ich aber noch: jetzt kann es ja sein, dass an einem tag mehrere zahlungen für den gleichen kreditor gebucht werden. d. h. ich bräuchte so ein view auch nochmals für die letzte beleg-nr. je kreditor. dieses view baue ich dann in letzten query ein, so dass ich wirkich die letzte buchung je kreditor / tag erhalte. kannst du mir da bitte nochmal eben schnell helfen? ist doch bestimmt ein klacks für dich... DANKESCHÖN!!!!
    __________________________________
    AS/400 eSeries Modell 150

Similar Threads

  1. Datensätze blockweise auslesen
    By Easyrider in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 20-06-08, 06:32
  2. Bilder (*.JPG, *.BMP) in PF
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 05-01-07, 11:47
  3. QueryManager / Query ---> Aufruf mit Variablen
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 29-11-06, 18:07
  4. Query Manager -_-
    By Azubiiiiii in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 03-08-06, 09:44
  5. Query und Datum
    By Hubert Brethauer in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 05-05-06, 12:37

Berechtigungen

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