Mysql 如何在sql中选择上一个最接近的值

Mysql 如何在sql中选择上一个最接近的值,mysql,sql,Mysql,Sql,现在我有两张桌子: *表1-* 日期汇率 00/00/0000 0.6 2018年4月1日0.81 2018年4月2日0.82 2018年5月1日0.83 2018年5月2日0.81 2018年5月3日0.82 *表2-* 日期美元 2018年2月2日50 2018年3月5日60 2018年4月1日50 2018年4月3日100 2018年4月15日200 2018年5月1日60 2018年5月2日80 2018年5月3日90 我想要一个表3,它反映了转换后的金额*表3-* 日期美元兑换金额

现在我有两张桌子:

*表1-*

日期汇率

00/00/0000 0.6

2018年4月1日0.81

2018年4月2日0.82

2018年5月1日0.83

2018年5月2日0.81

2018年5月3日0.82

*表2-*

日期美元

2018年2月2日50

2018年3月5日60

2018年4月1日50

2018年4月3日100

2018年4月15日200

2018年5月1日60

2018年5月2日80

2018年5月3日90

我想要一个表3,它反映了转换后的金额*表3-*

日期美元兑换金额

2018年2月2日50*0.6=30

2018年3月5日60*0.6=36

2018年4月1日50*0.81=40.5

2018年4月3日100*0.82=82

2018年4月15日200*0.82=164

2018年5月1日60*0.83=49.8

2018年5月2日80*0.81=64.8

2018年5月3日90*0.82=73.8

如何在SQL中实现这一点?原始数据非常大

问题是,我希望表3的2018年4月15日和2018年4月3日的换算金额遵循2018年4月2日的汇率,因为表1中没有2018年4月15日或2018年4月3日的汇率。基本上,我希望丢失的汇率与之前日期最接近的汇率保持一致

此外,对于2018年4月1日之前的所有日期,汇率应遵循表1的00/00/0000汇率


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

您可以使用相关子查询,为表2中的每个日期查找表1中最近的日期:

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;

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

嗨,蒂姆,非常感谢你的帮助。我刚刚又编辑了我的问题,你能看一下吗?另外,这部分的顺序是什么意思,ABSDATEDIFFt1.Date,t2.datelimit1?非常感谢你@Evie我做了一个更改,以便在表2中的某个日期缺少之前的费率时使用该费率。@我现在又开始使用手机了,要看到这些边缘情况可不是那么容易。@TimBiegeleisen。如果问题的格式更容易理解,那么更新答案就更容易了。非常感谢@TimBiegeleisen这真的很有帮助