-
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
-
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
-
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
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
-
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
-
@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
-
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
-
@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
-
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
-
.
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
-
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 Days1, Kreditor, Min(Days3) Min3, Max(Days4) Max4
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
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
-
By Easyrider in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 20-06-08, 06:32
-
By GraueEminenz in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 05-01-07, 11:47
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 29-11-06, 18:07
-
By Azubiiiiii in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 03-08-06, 09:44
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks