在另一个表中按日期选择最后一个值

时间:2014-03-07 08:08:58

标签: mysql date join max

我正在尝试从年度数据表(Companies_Annual)中选择数据,并根据其会计年度末的现行汇率将这些值转换为另一种货币,这些汇率存储在包含每日汇率的第二个表中费率(FX_daily)。然而,一个复杂的因素是,我需要从Companies_Annual选择一些历史性的财政年度结果可能无法获得汇率值,而未来的年度数据将需要按照最后的现行汇率进行转换。

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

表结构大致如下:

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

我试图将简单的select与来自CA表的{​​{1}}数据结合起来

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

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

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

1 个答案:

答案 0 :(得分:0)

GROUP BYfx_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