-
 Zitat von Fuerchau
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
-
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).
-
... 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
-
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
-
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.
-
Versteh ich jetzt nicht wie da die Syntax sein soll.
GG 4847
-
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.
-
 Zitat von Fuerchau
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.
Ich habe mir das fast gedacht.
In der Kundenauf steht Kundennummer und Auftragsdatum vom Kunden
1026 22.02.17
1026 10.01.17
1026 01.01.17
8999 22.02.17
8999 01.02.17
In der adr01pf steht nur die Kundennummer und Adresse.
Bei meiner Funktion bekomme jetzt 1026 3 mal angezeigt, aber mit dem Datum 22.02.17.
-
Vielleicht gibt's den Kunden mehrmals in der Adreßdatei?
SELECT * FROM ADR01PF WHERE ADKTO=1026
-
Die Dateifolge ist falsch.
Was ist deine Primary Tabelle?
with x as (select akkto, max(akkdn1) Datum from kndauf
group by akkto)
select * from x
liefert dir je akkto das letzte Datum aus KNDAUF.
Somit ist dies wieder deine Primary
with x as (select akkto, max(akkdn1) Datum from kndauf
group by akkto)
select * from x
inner join kndauf k on x.akkto=k.akkto and x.datum=k.akkdn1
hier kannst du dann gerne nochden Kundenstamm anhängen:
with x as (select akkto, max(akkdn1) Datum from kndauf
group by akkto)
select * from x
inner join kndauf k on x.akkto=k.akkto and x.datum=k.akkdn1
inner join adr01pf a on x.akkto = a.adkto
-
Reihenfolge
 Zitat von Fuerchau
Die Dateifolge ist falsch.
Was ist deine Primary Tabelle?
hier kannst du dann gerne nochden Kundenstamm anhängen:
with x as (select akkto, max(akkdn1) Datum from kndauf
group by akkto)
select * from x
inner join kndauf k on x.akkto=k.akkto and x.datum=k.akkdn1
inner join adr01pf a on x.akkto = a.adkto
Genau das war das Problem.
Danke Dir. Dir Problematik ist das ich bei weiteren Dateien die ich noch lesen muß jeweils mehrere Ausprägungen habe wo ich eigentlich auch immer nur den ersten Satz bräuchte.
Das heißt ich müßte da auch eine cte machen.
Muß ich mal prüfen....
GG 4846
Similar Threads
-
By Kirsten Steer in forum Archiv NEWSboard Events
Antworten: 0
Letzter Beitrag: 02-09-02, 11:25
-
By Koelch400 in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 15-08-02, 10:53
-
By RM Haaßengier in forum Archiv NEWSblibs
Antworten: 0
Letzter Beitrag: 04-06-02, 14:04
-
By delphix in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 23-01-02, 15:02
-
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
-
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