-
SQL mit zwei Max Datum
Hallo Forum,
Ich möchte eine View mit dem aktuellsten Verkaufspreis und Einkaufspreis. Beide Preise sind in Tabellen mit einem gültig ab Datum gespeichert. Eine Verkaufspreisliste bring ich schon zustande, nur wenn sie kombiniert werden soll, da hakt es.
meine SQL-Definition:
Code:
with x as (select itemno, max(valdat) maxdat from mylib.salespric group by itemno
order by itemno)
select x.itemno as "Artikelnummer",
char(date(timestamp((a.valdat + 19000000) concat'000000')),eur) as "ab Datum",
currency as "Währung",
price as "Verkaufspreis"
from x join mylib.salespric a on x.itemno = a.itemno and MaxDat = a.valdat
Für einen kleinen Anschubser sag ich schon mal Danke.
kf
-
ungefär so?
Code:
with a as (select item, max(dat) as dat
from VKfile
group by item),
b as (select item, dat, price
from a, VKfile
where a.item=VKfile.item and a.dat=VKfile.dat),
c as (select item, max(dat) as dat
from EKfile
group by item),
d as (select item, dat, price
from a, EKfile
where a.item=EKfile.item and a.dat=EKfile.dat)
select item, b.price als VKP, d.price as EKP
from b, d
where b.item = d.item
Wenn ich Sie richtig verstanden habe.
in B und D steht je Item der letzte Wert. Nur wenn Preise im voraus erfasst werden sind noch Anpassungen nötig.
DiBe
-
Sieht gut aus, ich versuchs mal.
Danke
kf
-
Wie bereits in einem anderem Thread mitgeteilt, lässt sich dies mittels Lateral sehr leicht lösen.
Meist hat man ja ein "Gültig Ab" oder "Gültig Bis".
Folglich gibts 2 Varianten:
Code:
select a.menge, b.preis, a.PreisDatum
from AuftragsPosition a
cross join lateral (
select Preis from PreisTabelle b
where a.Artikel = b.Artikel and a.Preisdatum >= b.GueltigAb
order by Artikel, GueltigAb asc
fetch first 1 rows only
) b
select a.menge, b.preis, a.PreisDatum
from AuftragsPosition a
cross join lateral (
select Preis from PreisTabelle b
where a.Artikel = b.Artikel and a.Preisdatum <= b.GueltigBis
order by Artikel, GueltigBis desc
fetch first 1 rows only
) b
Theoretisch könnte man auch 2 Cross-Joins zusammen verwenden und per coalesce(b1.Preis, b2.Preis) prüfen:
Wenn kein aktueller Preis (b1) dann nimm den letzten vorhandenen Preis (b2).
Similar Threads
-
By marcus2610 in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 13-05-20, 10:20
-
By Hubert in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 07-06-17, 12:22
-
By Rainer Ross in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 27-02-17, 17:16
-
By MB in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 16-05-03, 12:26
-
By KB in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 16-05-01, 10:30
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