PDA

View Full Version : Letzter Satz in einem PF mit QUERY auslesen



Seiten : [1] 2

Q_SYS
07-06-09, 20:14
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!

prsbrc
08-06-09, 06:48
Guten Morgen,

mit Query kenn ich mich nicht so gut aus aber mittels SQL ginge es u.a. so:


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

B.Hauser
08-06-09, 06:50
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

Q_SYS
08-06-09, 19:21
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

andigoering
10-06-09, 16:56
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

Q_SYS
10-06-09, 17:42
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?

andigoering
10-06-09, 18:59
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

Q_SYS
10-06-09, 19:18
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...

andigoering
10-06-09, 19:45
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/infocenter/iseries/v5r3/index.jsp?topic=/rzajp/rzajpssrpg.htm

Q_SYS
10-06-09, 19:56
jetzt disqualifiziere ich mich geich selber: ich habe auf meiner maschine a.) keinen RPG-compiler und b.) kann ich auch kein RPG... :confused: 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!