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-* 日期美元兑换金额 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汇率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-* 日期美元兑换金额
非常感谢你的帮助!非常感谢你 您可以使用相关子查询,为表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这真的很有帮助