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

如何合并Rate与RateHistory表,查询USD的新旧汇率值?

合并Rate与RateHistory的查询方案

实现思路

通过子查询锁定RateHistory中USD对应的最新移入记录(依据FROMSOURCEDATE字段取最大值),再与Rate主表关联,整合出当前汇率与历史最新汇率的组合结果。

最终SQL语句

基础子查询写法(兼容多数数据库)

SELECT
    r.CR,
    r.RATE AS NEWRATE,
    rh.RATE AS OLDRATE,
    rh.OPERATOR
FROM
    Rate r
LEFT JOIN (
    SELECT
        CR,
        RATE,
        OPERATOR
    FROM
        RateHistory
    WHERE
        CR = 'USD'
        AND FROMSOURCEDATE = (
            SELECT MAX(FROMSOURCEDATE)
            FROM RateHistory
            WHERE CR = 'USD'
        )
) rh ON r.CR = rh.CR
WHERE
    r.CR = 'USD';

窗口函数优化写法(支持窗口函数的数据库:MySQL 8.0+、SQL Server、Oracle等)

SELECT
    r.CR,
    r.RATE AS NEWRATE,
    rh.RATE AS OLDRATE,
    rh.OPERATOR
FROM
    Rate r
LEFT JOIN (
    SELECT
        CR,
        RATE,
        OPERATOR,
        ROW_NUMBER() OVER (PARTITION BY CR ORDER BY FROMSOURCEDATE DESC) AS rn
    FROM
        RateHistory
    WHERE
        CR = 'USD'
) rh ON r.CR = rh.CR AND rh.rn = 1
WHERE
    r.CR = 'USD';

语句说明

  • 基础写法:内层子查询先筛选出USD历史记录中移入时间最晚的那条,再与主表关联,确保只取最新的历史汇率数据。
  • 窗口函数写法:通过ROW_NUMBER()给USD的历史记录按移入时间倒序编号,取编号为1的最新记录,逻辑更清晰,适合多货币场景扩展。
  • 使用LEFT JOIN可以保证:即使历史表中无USD记录,主表的当前汇率信息仍能正常返回(此时OLDRATE和OPERATOR会显示为NULL)。

结果集字段说明

  • CR:货币代码,固定为'USD'
  • NEWRATE:Rate主表中的USD当前汇率
  • OLDRATE:RateHistory中最新移入的USD汇率
  • OPERATOR:历史记录移入时的操作人

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:02:35