“汇率向前匹配”模式,即:业务人员没有录入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           

解决方案 »

  1.   

    SELECT c.日期, a.币种, a.汇率
      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.币种;
      

  2.   


    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行。