Het zou moeten werken als je dit overschakelt naar een where
clausule:
select *
from acc_accounts acc join
kp_paramcore p
on acc.account_no = p.accountnum and
acc.suffix = p.suffixc LEFT JOIN
ftf_rates fx
ON p.maturestart = fx.ftf_vadealtsinir and
p.maturefinish = fx.ftf_vadeustsinir and
fx.statusrec = 'A' and
fx.currencycode = acc.currencsw_kod and
fx.status= 'A'
where fx.ftf_validitystartdate= (SELECT MAX(ff.ftf_validitystartdate)
FROM ftf_rates ff
WHERE ff.status = 'A' and
ff.statusrec = 'A'
p.v_CurrentDate BETWEEN ff.systemstartdate AND ff.systemfinishdate AND ff.currencycode = acc.currencsw_kod
)
Je verliest echter de kenmerken van de 'left outer join', dus je zou ook willen toevoegen:or fx.ftf_validitystartdate is null
. Ik denk dat v_CurrentDate afkomstig is van "p". Het is altijd een goed idee om tabelaliassen voor kolomnamen te gebruiken.
Ik vraag me echter af of de subquery echt nodig is. Het is alleen nodig als er meer dan één record is dat voldoet aan de voorwaarden in de subquery. Anders denk ik dat je gewoon de on
. kunt wijzigen clausule te zijn:
ON p.maturestart = fx.ftf_vadealtsinir and
p.maturefinish = fx.ftf_vadeustsinir and
fx.statusrec = 'A' and
fx.currencycode = acc.currencsw_kod and
fx.status= 'A'and
p.v_CurrentDate BETWEEN fx.systemstartdate AND fx.systemfinishdate