【发布时间】:2021-07-10 01:21:38
【问题描述】:
我有以下三个表格,我想从中检查货币是否不是美元,然后根据汇率进行转换。如果没有找到匹配项,我需要根据交易日期和当月的 exchange_date 推导出计算,然后得到下一个最近的上一个日期小于交易日期。
PRC_TABLE
---------
Txn_Id Net_Value
------ ---------
T001 120
T002 101.34
T003 54.2
T004 10.5
T005 20.45
TXN_TABLE
---------
Txn_Id Curr Ex_Type Txn_Date
------ ---- ------- --------
T001 USD M 2021-05-28
T002 EUR M 2019-02-07
T003 INR A 2018-07-30
T004 EUR B 2020-08-05
T005 GBP M 2021-04-07
EXRATE_TABLE
------------
Curr Ex_Type Ex_rate Ex_Date
---- ------ ------- --------
EUR M 1.2 2021-07-01
EUR M 0.75 2020-01-01
EUR M 2.35 2018-01-01
INR A 3.5 2021-01-01
INR A 1.6 2018-07-01
EUR B 0.54 2021-07-01
EUR B 1.78 2020-08-01
GBP M 2.45 2021-07-01
GBP M 1.67 2020-01-01
USD M 1 1970-01-01
基本上每个月都有汇率,但在最坏的情况下,我可能没有某些月份的汇率,或者全年的汇率相同。如果找到该月的 txn_date,我尝试使用下面的方法返回值。
select
PR.Txn_Id,
PR.Net_Value,
TX.Curr,
TX.Ex_Type,
TX.Txn_Date,
EX.Ex_rate,
case when TX.Curr = 'USD' then PR.Net_Value else round((PR.Net_Value*EX.Ex_rate),2) end as Conv_Net_Value
from
PRC_TABLE PR
left outer join TXN_TABLE TX
on PR.Txn_Id = TX.Txn_Id
left outer join EXRATE_TABLE EX
on TX.Curr = EX.Curr and TX.Ex_Type = EX.Ex_Type and EX.Ex_Date = date_trunc('MONTH',TX.Txn_Date);
以上查询结果
TXN_ID NET_VALUE CURR EX_TYPE TXN_DATE EX_DATE EX_RATE CONV_NET_VALUE
------ --------- ----- ------- --------- ------- ------- --------------
T001 120 USD M 2021-05-28 NULL NULL 120
T002 101.34 EUR M 2019-02-07 NULL NULL NULL
T003 54.2 INR A 2018-07-30 2018-07-01 1.6 86.72
T004 10.5 EUR B 2020-08-05 2020-08-01 1.78 18.69
T005 20.45 GBP M 2021-04-07 NULL NULL NULL
请有人帮助我达到预期的结果。我希望最终值计算如下。理想情况下,我想获得给定 txn_id 的转换值。
TXN_ID NET_VALUE CURR EX_TYPE TXN_DATE EX_DATE EX_RATE CONV_NET_VALUE
----- --------- ---- ------- -------- -------- ------- --------------
T001 120 USD M 2021-05-28 1970-01-01 1 120
T002 101.34 EUR M 2019-02-07 2018-01-01 2.35 238.149
T003 54.2 INR A 2018-07-30 2018-07-01 1.6 86.72
T004 10.5 EUR B 2020-08-05 2020-08-01 1.78 18.69
T005 20.45 GBP M 2021-04-07 2020-01-01 1.67 34.1515
【问题讨论】:
标签: date snowflake-cloud-data-platform