【发布时间】:2021-05-20 23:30:15
【问题描述】:
我需要将表格中显示的过去 3 年的交易进口转换为欧元。为此,我使用了一个单独的表格,其中包含转换值。所以我需要加入这两个表,将正确的转换率附加到第一个表。 费率表有两个字段(valid_from 和 valid_to),其中包含过去 3 年的费率。因此,我必须在正确的时间附上正确货币的汇率(对于欧元,我们有一个单一汇率 = 1)。 这是我建立的查询:
select *
from(SELECT date_trx, view_currency FROM transactions_table) transactions
left join
(SELECT Valid_from, Exchange_Rate, Exchange_Rate_Type, From_currency, To_currency,
coalesce(LEAD(Valid_from) OVER ( ORDER BY Valid_from ASC), cast('3001-12-31' as DATE)) valid_to
FROM exchange_table where To_currency='EUR' and Exchange_Rate_Type = 'EURX') rates
on transactions.view_currency = rates.From_currency
and transactions.date_trx >= rates.Valid_from
and transactions.date_trx < rates.valid_to
我手动创建了valid_to,只是将一个时期的valid_from值放入前一个时期的valid_to。当汇率仍然有效时,我输入了 3001-12-31。
这个查询的问题是它为所有费率字段返回 NULL 值。我检查了两个单独的表,它们都很好。有趣的是,如果我只过滤一种货币的汇率表,它可以正常工作(使用该货币进行的交易没有 NULL 值),否则不会。如果我尝试过滤两种或多种货币,它也会为所有交易返回 NULL 值。
【问题讨论】:
标签: sql join google-bigquery