现在我有2张桌子:
*表1 - *日期汇率
00/00/0000 0.6
4/1/2018 0.81
4/2/2018 0.82
5/1/2018 0.83
5/2/2018 0.81
5/3/2018 0.82
*表2 - *
日期美元2/2/2018 50
3/5/2018 60
4/1/2018 50
4/3/2018 100
4/15/2018 200
5/1/2018 60
5/2/2018 80
5/3/2018 90
我希望有一个表3反映转换金额*表3 - *
日期美元转换金额2/2/2018 50 50 * 0.6 = 30
3/5/2018 60 60 * 0.6 = 36
4/1/2018 50 50 * 0.81 = 40.5
4/3/2018 100 100 * 0.82 = 82
4/15/2018 200 200 * 0.82 = 164
5/1/2018 60 60 * 0.83 = 49.8
5/2/2018 80 80 * 0.81 = 64.8
5/3/2018 90 90 * 0.82 = 73.8
我如何在SQL中实现这一点?原始数据非常大。
重要的是我希望Table3的4/15/2018和4/3/2018 converted_amount遵循4/2/2018汇率,因为没有4/15/2018或4/3/2018交换表1中的比率。基本上我希望失去的汇率能够跟随他们最近的日期汇率。
此外,对于2014年4月1日之前的所有日期,汇率应遵循表1的00/00/0000汇率。
真的很感谢你的帮助!非常感谢你!
答案 0 :(得分:1)
您可以使用相关子查询,该子查询在表1中为表2中的每个日期找到最接近的日期:
SELECT
t2.Date,
t2.USD,
t2.USD * (SELECT t1.ExchangeRate FROM Table1 t1
WHERE t1.Date <= t2.Date
ORDER BY DATEDIFF(t2.Date, t1.Date) LIMIT 1) AS ConvertedAmount
FROM Table2 t2;
请注意,这是一种不受控制的方法,因为表2中日期两侧可能有两个最接近的日期,一个可能是任意选择的。实际上,这里更好的长期方法是使用日历表,每天只有外汇汇率。