【问题标题】:select on last value by date in another table在另一个表中按日期选择最后一个值
【发布时间】:2014-04-10 06:51:54
【问题描述】:

我正在尝试从年度数据表 (Companies_Annual) 中选择数据,并根据其财政年度结束时的现行汇率将值转换为另一种货币,该汇率存储在包含每日汇率的第二个表中 ( FX_daily)。然而,一个复杂的因素是,我需要从Companies_Annual 中选择某些历史财政年度结束时的汇率值可能不可用,而未来的年度数据将需要以最后的现行汇率转换。

我的问题是,如何从FX_daily 表中选择与CA 表中的Year 相关的最后一个可用的fx_rate,并将其应用于转换@987654329 中的Value 字段@ 桌子?我试图在FX.Date 上加入CA.year 并使用MAX() 函数为每个fx_rate 获取最后一个fx_rate,但我的语法显然是错误的。谁能帮我这个?

表结构大致如下:

CA table
Year        ticker  Value       
2012-12-31  xyz     2,000       
2013-12-31  xyz     2,100       
2014-12-31  xyz     2,200       
2015-12-31  xyz     2,300       
2016-12-31  xyz     2,400       

FX_daily table 
Date        fx_code  fx_rate
2000-12-25  £:$         1.45
2000-05-26  £:$         1.45
2000-05-27  £:$         1.45
……  etc
2014-02-04  £:$         1.67
2014-02-05  £:$         1.65
2014-02-06  £:$         1.67
2014-02-07  £:$         1.66

我尝试结合简单的选择从 CA 表中获取 Year 数据

SELECT ca.year
FROM companies_annual ca
WHERE ca.ticker ='xyz' 
AND ca.year >=2013-12-31 
ORDER BY ca.year LIMIT 4

这给了我年终日期确定

year
2012-12-31
2013-12-31
2014-12-31
2015-12-31

并使用Max()函数获取最后一个fx_rate和date,

SELECT max(date),fx_code,fx_rate 
FROM fx_daily
WHERE date <='2016-12-31'
AND fx_code ='$:£' 
ORDER BY date LIMIT 6

这让我得到了最后的费率,但只有 1 年

max(date)   fx_code   fx_rate
2014-03-05  $:£         1.618

【问题讨论】:

    标签: mysql date join max


    【解决方案1】:

    将GROUP BY 添加到您对fx_code 和fx_rate 值的查询中。

    示例:

    SELECT 
      max(date) mx_date,fx_code,fx_rate 
    FROM fx_daily
    WHERE 
      date <='2016-12-31' AND fx_code ='$:£' 
    GROUP BY 
      fx_code, fx_rate
    ORDER BY date LIMIT 6
    

    【讨论】:

    • 感谢 Ravinder,您的代码提供了 fx_daily 表中最近 6 天的 fx_rate,但没有提供我所追求的 Companies_Annual (CA) 表中过去 6 年结束日期中每个日期的 fx_rates。
    • 谁能帮忙完成这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多