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).
Bookmarks