-
ich unterstelle mal, dass artikel und opcode die Sortierfelder sind:
select *
from mytable m
where m.artikel = :myArtikel
and m.opcode >= (select max(opcode)
from mytable i
where i.artikel = :myArtikel
and i.opcode < :myOpcode)
damit machst du deinen Cursor
und mit einem Blockfetch (falls du nur lesen willst) liest du 3 Zeilen davon ein und fertig.
Vorsicht: das vorliegende Design ist Waffenschein pflichtig!!! Wenn da gleichzeitig Einfügungen versucht werden gehts in den Ofen.
D*B
 Zitat von PeterS
Vielen Dank für die schnellen Antworten.
Leider bin ich kein SQL-Experte. IBM verweist mich leider nur auf diverse Handbücher und Redbooks, in denen zwar viele Beispiele stehen, die aber nicht so ganz mein Problem darstellen.
Es ist so, das ein Web-Programm Datensätze in diverse Dateien schreibt. Hier ist das Problem, dass die Datensätze nicht unbedingt chronologisch gemeldet werden. Die drei wichtigsten Felder sind eine Artikelnummer, ein Reparaturdatum und ein Operationscode. Für eine Artikelnummer können halt mehrere Operationscodes mit unterschiedlichem oder auch gleichem Reparaturdatum aber unterschiedlichen Operationscodes gemeldet werden:
Satz1: Datum 23.05.07 O-Code S000
Satz2: Datum 02.12.08 O-Code S015
Satz3: Datum 02.12.08 O-Code S045
Dies ist die Reihenfolge, die ich per SQL ermittel. Satz2 ist als letzter gemeldet worden und muss jetzt mit dem Inhalt anderer Felder aus der Datei mit dem vorherigen und dem nachfolgendem Satz verglichen werden. Per Parameter, weiß ich, dass es sich um den Satz2 geht, normalerweise würde ich halt ein CHAIN auf den Satz2 machen, dann einmal READE und einmal READPE.
Ich hoffe, ich habe es verständlich ausgedrückt.
-
Danke für die Antwort,
Artikel und OpCode sind Sortierfelder und ich will auch nur lesen. Das mit den 3 Sätzen war nur ein Beispiel, es können auch 50 oder mehr Sätze werden. Der zuletzt empfangene Satz ist leider nicht der letzte in der Sortierfolge, so dass ich schauen muss, wo dieser gerade empfangene Satz sich einreiht und dann dementsprechend den vorherigen und den nachfolgenden Satz lesen muss, um zu entscheiden, ob der Satz nun gültig oder nicht gültig ist. Dies entscheide ich anhand anderer Feldinhalte des vorherigen und des nachfolgenden Satzes. Ist ein bisschen verwirrend, ich weiß. Wichtig ist einfach nur, dass ich mich auf den empfangenen Satz positionieren kann. So langsam bekomme ich das Gefühl, das dies mit SQL gar nicht möglich ist und ich irgendwie eine neue Datei aus den zwei vorhandenen schaffen muss um dann via normalen RPG mit den Schlüsselfeldern aus beiden Dateien zugreifen muss.
Peter
-
 Zitat von PeterS
Der zuletzt empfangene Satz ist leider nicht der letzte in der Sortierfolge...
... rrn(filename) könnte helfen.
-
- SQL arbeitet Mengen orientiert.
- Rekord Löffel Ekzem ist ISAM (vor relational).
- Was ISAM kann, kann SQL schon lange, nur die Lösung ist eine andere (in Worten: eine a n d e r e).
- Für Ratschläge zur Lösung braucht man eine verständliche Problembeschreibung! Diese Problembeschreibung verstehe ich immer weniger, je mehr sie beschrieben wird.
D*B
 Zitat von PeterS
Danke für die Antwort,
Artikel und OpCode sind Sortierfelder und ich will auch nur lesen. Das mit den 3 Sätzen war nur ein Beispiel, es können auch 50 oder mehr Sätze werden. Der zuletzt empfangene Satz ist leider nicht der letzte in der Sortierfolge, so dass ich schauen muss, wo dieser gerade empfangene Satz sich einreiht und dann dementsprechend den vorherigen und den nachfolgenden Satz lesen muss, um zu entscheiden, ob der Satz nun gültig oder nicht gültig ist. Dies entscheide ich anhand anderer Feldinhalte des vorherigen und des nachfolgenden Satzes. Ist ein bisschen verwirrend, ich weiß. Wichtig ist einfach nur, dass ich mich auf den empfangenen Satz positionieren kann. So langsam bekomme ich das Gefühl, das dies mit SQL gar nicht möglich ist und ich irgendwie eine neue Datei aus den zwei vorhandenen schaffen muss um dann via normalen RPG mit den Schlüsselfeldern aus beiden Dateien zugreifen muss.
Peter
-
Wenn die Entscheidung, welcher Satz der letzte ist, von anderen Werten abhängt, so stimmt einfach die Sortierung nicht.
Prüfe doch einfach, inwieweit du die Sortierung beeinflussen kannst.
Hilfreich können hier CTE und Case-Ausdrücke sein:
with xTemp as (
select ...., case when Bedingung then Wert else Wert2 end as MySort, ...
from ...
)
select * from xTemp order by MySort
rrn(x) ist keine Lösung, da bei REUSEDLT(*YES), Standard bei SQL-Tables, rrn nicht die Eingangsfolge ist.
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By malzusrex in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 19-09-06, 11:04
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
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