如何在sql中选择以前最接近的值

时间:2018-05-02 05:20:53

标签: mysql sql

现在我有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汇率。

真的很感谢你的帮助!非常感谢你!

1 个答案:

答案 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;

enter image description here

Demo

请注意,这是一种不受控制的方法,因为表2中日期两侧可能有两个最接近的日期,一个可能是任意选择的。实际上,这里更好的长期方法是使用日历表,每天只有外汇汇率。