我想连接两个表,每个货币组有一个缺少行。
桌子:
按月汇总的本地货币交易。(交易表)
Date Currency spend
2019-01-01 EUR 100
2019-02-01 EUR 200
2019-03-01 EUR 500
2019-04-01 EUR 214
2019-01-01 JYP 3200
2019-01-01 JYP 1534
2019-02-01 JYP 1534
2019-03-01 JYP 1534
2019-04-01 JYP 1534
按月汇率(汇率数据表)
Month Currency Average Monthly rate
2019-01-01 EUR 1.2
2019-02-01 EUR 1.3
2019-03-01 EUR 1.4
2019-01-01 JYP 101
2019-02-01 JYP 102
2019-03-01 JYP 103
2019-01-01 USA 1
2019-02-01 USA 1
2019-03-01 USA 1
我想执行join以获得所有美元交易。问题是当前月份(2019-04-01)的费率不可用。因此,当前月份的所有事务在联接后都返回空值。
我已经设法用R解决了这个问题,但是有没有办法用SQL解决呢?
我一直在尝试使用窗口函数,但没有成功
LAG(rate,1) OVER (PARTITION BY currency ORDER BY month)
R中的解:假设速率保持不变。
library(lubridate)
library(dplyr)
exchange_previous <- exchange_data[exchange_data$month == floor_date(today(),"month") %m-% months(1),]
exchange_previous$month <- exchange_previous$month %m+% months(1)
exchange_data<-rbind(exchange_data,exchange_previous)
final <- transactions %>%
left_join(exchange_data, by = c("currency" = "name", "floor_date" = "month"))
Then simply multiply
最佳答案
使用横向连接,但应如下所示:
select t.*, ed.average_monthly_rate,
from transactions t left join lateral
(select ed.*
from exchange_data ed
where ed.currency = t.currency and
ed.month <= t.date
order by ed.month desc
fetch first 1 row only
) ed
on 1=1;
我不确定你是想除以还是乘以这个比率。
关于sql - 如何在上个月联接两个缺少行的表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55641818/