You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL实现同表同时间下非USD汇率与USD汇率的除法运算

解决方案:计算指定货币与同期USD汇率的比值

要实现同一temptime下指定货币汇率和USD汇率的商,有两种常用的SQL写法,适配不同版本的MySQL环境:

方法1:自连接(兼容所有MySQL版本)

通过将表与自身按temptime关联,匹配出每个时间点的USD汇率,再计算比值:

SELECT 
    cr.currency,
    cr.rate,
    cr.temptime,
    cr.rate / usd.rate AS usd_relative_rate
FROM 
    currency_rates cr
JOIN 
    currency_rates usd ON cr.temptime = usd.temptime AND usd.currency = 'USD'
-- 可选:筛选特定货币,比如只看AUD和CAD
-- WHERE cr.currency IN ('AUD', 'CAD')
ORDER BY 
    cr.temptime, cr.currency;

说明:

  • 主表cr取出所有货币的汇率记录,通过temptime关联到子表usd中同一时间的USD汇率
  • 直接用cr.rate / usd.rate得到相对USD的比值
  • 如果只需要计算特定货币,加上WHERE条件即可

方法2:窗口函数(MySQL 8.0+ 推荐)

利用窗口函数在同一行中直接获取当前temptime对应的USD汇率,写法更简洁高效:

SELECT 
    currency,
    rate,
    temptime,
    rate / MAX(CASE WHEN currency = 'USD' THEN rate END) OVER (PARTITION BY temptime) AS usd_relative_rate
FROM 
    currency_rates
-- 可选:筛选特定货币
-- WHERE currency IN ('AUD', 'EUR', 'CAD')
ORDER BY 
    temptime, currency;

说明:

  • MAX(CASE WHEN currency = 'USD' THEN rate END) OVER (PARTITION BY temptime) 会为每个temptime分组提取出USD的汇率(每组仅一条USD记录,MAX不影响结果)
  • 直接用当前货币的rate除以这个值,得到相对比值
  • 窗口函数无需额外表连接,查询逻辑更直观,性能更优

测试示例(基于你提供的样本数据)

对于2018-03-16的记录:

  • USD汇率:1.232
  • AUD相对比值:133.82 / 1.232 ≈ 108.62
  • CAD相对比值:1.99 / 1.232 ≈ 1.615

执行上述SQL后会直接输出这些计算结果。

内容的提问来源于stack exchange,提问作者Julius Barra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:36:14