“汇率向前匹配”模式,即:业务人员没有录入2010-12-17号的汇率,则后台默认使用2010-12-16号的汇率,若16号也没有相应的汇率,则使用15号的汇率值,以此类推可以得到每天的汇率供业务员使用。
现在有一张汇率表A(日期,币种,汇率), 日历表B(日期),数据如下: A
日期, 币种, 汇率
2010-12-15 美元 6
2010-12-15 欧元 9
2010-12-16 欧元 9
2010-12-17 欧元 82010-12-18 美元 7
2010-12-18 欧元 10
------------------------
B
日期
2010-12-15
2010-12-16
2010-12-17
2010-12-18----------------
结果:B.日期, A.币种, A.汇率
2010-12-15 美元 6
2010-12-15 欧元 9 2010-12-16 美元 6
2010-12-16 欧元 9 2010-12-17 美元 6
2010-12-17 欧元 82010-12-18 美元 7
2010-12-18 欧元 10
现在有一张汇率表A(日期,币种,汇率), 日历表B(日期),数据如下: A
日期, 币种, 汇率
2010-12-15 美元 6
2010-12-15 欧元 9
2010-12-16 欧元 9
2010-12-17 欧元 82010-12-18 美元 7
2010-12-18 欧元 10
------------------------
B
日期
2010-12-15
2010-12-16
2010-12-17
2010-12-18----------------
结果:B.日期, A.币种, A.汇率
2010-12-15 美元 6
2010-12-15 欧元 9 2010-12-16 美元 6
2010-12-16 欧元 9 2010-12-17 美元 6
2010-12-17 欧元 82010-12-18 美元 7
2010-12-18 欧元 10
FROM a,
(SELECT b.日期, a.币种, MAX(a.日期) mdate
FROM a, b
WHERE a.日期 <= b.日期
GROUP BY b.日期, a.币种) c
WHERE a.日期 = c.mdate
AND a.币种 = c.币种;
with tb as(
select to_date('2010-12-15','yyyy-mm-dd') 日期,'美元' 币种,6 汇率 from dual union all
select to_date('2010-12-15','yyyy-mm-dd'),'欧元',9 from dual union all
select to_date('2010-12-16','yyyy-mm-dd'),'欧元',9 from dual union all
select to_date('2010-12-17','yyyy-mm-dd'),'欧元',8 from dual union all
select to_date('2010-12-18','yyyy-mm-dd'),'美元',7 from dual union all
select to_date('2010-12-18','yyyy-mm-dd'),'欧元',10 from dual),
ta as(
select to_date('2010-12-15','yyyy-mm-dd') 日期 from dual union all
select to_date('2010-12-16','yyyy-mm-dd') from dual union all
select to_date('2010-12-17','yyyy-mm-dd') from dual union all
select to_date('2010-12-18','yyyy-mm-dd') from dual)
--以上为提供数据的语句
select t.日期,t.币种,t.汇率
from (select ta.日期,tb.币种,tb.汇率,
row_number() over(partition by ta.日期,tb.币种 order by tb.日期 desc) rn
from ta,tb
where ta.日期>=tb.日期) t
where t.rn=1日期 币种 汇率
------------------- ---- ----------
2010-12-15 00:00:00 美元 6
2010-12-15 00:00:00 欧元 9
2010-12-16 00:00:00 美元 6
2010-12-16 00:00:00 欧元 9
2010-12-17 00:00:00 美元 6
2010-12-17 00:00:00 欧元 8
2010-12-18 00:00:00 美元 7
2010-12-18 00:00:00 欧元 10已选择8行。