关于非工作日汇率转换SQL查询的两项技术疑问咨询
技术问询:汇率转换SQL查询相关疑问
需求背景
编写SQL查询将交易金额转换为美元(ccy_code = 840),需考虑汇率表仅含工作日数据,周末/节假日交易需采用此前最后一个工作日的汇率,结果需包含客户ID、交易日期、美元交易金额。
数据表信息
交易表(Transactions)
Client_id Report_date Txn_amount 123 2017.01.01 50000
汇率表(Rates)
Report_date Ccy_code CCy_rate 2016.12.30 840 60,58 2017.01.09 840 61,01
待分析的SQL查询代码
SELECT Client_id, Report_date, sum_usd FROM ( SELECT Client_id, Transactions.Report_date, Transactions.Txn_amount*Rates.Ccy_rate AS sum_usd, ROW_NUMBER() OVER (PARTITION BY Transactions.Report_date ORDER BY Rates.Report_date DESC) AS ROW_NUM FROM Transactions JOIN Rates ON Rates.Report_date <= Transactions.Report_date WHERE Ccy_code = 840 ) AS T WHERE ROW_NUM = 1
正式技术问询
- 为何在需要获取更早日期的汇率时,窗口函数中要对
Rates.Report_date采用降序(DESC)排序? - 为何查询计算得到的
sum_usd结果为3000000,而非预期的3029000(50000*60.58)?
内容的提问来源于stack exchange,提问作者miga
相关产品推荐
相关产品推荐

