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

如何在SQL中查询指定日期前各货币对的最新汇率记录

问题描述

数据表结构与数据

有一张汇率表(假设表名为exchange_rates),字段包含:

  • id: 记录ID
  • baseCur: 基准货币
  • curr: 目标货币
  • rate: 汇率
  • date: 汇率日期

表内具体数据如下:

idbaseCurcurrratedate
1INRUSD812022-11-09
2INRUSD822022-11-08
3INRUSD802022-11-06
4INRCAD562022-11-05
5INRRUB0.742022-11-04
6INRCAD572022-11-12

查询需求

查询所有日期小于2022-11-09的各货币对(baseCur+curr组合)最新汇率记录,且每个货币对仅保留一条最新日期的记录。

预期输出

idbaseCurcurrratedate
2INRUSD822022-11-08
4INRCAD562022-11-05
5INRRUB0.742022-11-04

输出说明

  • ID为1、6的记录被排除:因其日期大于等于2022-11-09,不符合日期筛选条件;
  • ID为3的记录被排除:同货币对(INR→USD)存在ID为2的记录,日期更新(2022-11-08晚于2022-11-06),因此仅保留最新的那条记录。

解决方案

可以通过窗口函数ROW_NUMBER()实现需求,SQL语句如下:

SELECT id, baseCur, curr, rate, date
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY baseCur, curr 
            ORDER BY date DESC
        ) AS rn
    FROM exchange_rates
    WHERE date < '2022-11-09'
) t
WHERE rn = 1
ORDER BY id;

语句逻辑解释

  1. 内层子查询:先筛选出所有日期小于2022-11-09的记录,再用ROW_NUMBER()按baseCur和curr分组(即每个货币对为一组),每组内按date降序排序,给每条记录标记序号rn,组内最新的记录序号为1。
  2. 外层查询:只取每组中序号rn=1的记录,也就是每个货币对的最新汇率记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:40:24