August 1, 2004 at 4:33 pm
Hi all,
I have a base set of data that I need to join to a bunch of other tables to pull out joined information (building a data mart). This main tables holds financial data that needs to be converted into different currencies. The currency table is effective dated and I need to pull out the row that has the highest effective date that is less than my transaction date. The currency value is actually coming from one of the joined tables. So to keep it simple, I have three tables t1 which is base data (id, val1, val2, val3, trans_dt); t2 which is lookup data (id, cur_cd); t3 which is currency table (from_cur, to_cur, rate, effdt). Ordinarily I might just do a derived table from the 3 tables but the key in t1 is actually 7 fields and grouping by amount fields just doesn't sit too well with me. It seems to me I should be able to do this without a derived or temp table (like a having clause) but my brain can't seem to wrap itself around this or at least not without grouping by 27 fields. This is something I am running into more and more as financial data is often effective dated.
Any help would be appreciated.
August 1, 2004 at 10:22 pm
I don't think there's a really nice solution to this one. But this might work:
select t1..., t2..., t3...
from
t1 inner join t2 on t1.id = t2.id cross join t3
where
t3.from_cur = t2.cur_cd and
t3.effdt = (
select max(t3s.effdt) from t3 t3s where t3s.effdt < t1.trans_dt
and t3s.from_cur = t2.cur_cd
)
This assumes that (from_cur, effdt) is a candidate key for t3.
It won't run quickly
Regards.
The absence of evidence is not evidence of absence
- Martin Rees
The absence of consumable DDL, sample data and desired results is, however, evidence of the absence of my response
- Phil Parkin
Viewing 2 posts - 1 through 1 (of 1 total)
You must be logged in to reply to this topic. Login to reply