我想连接两个表,每个货币组有一个缺少行。
桌子:
按月汇总的本地货币交易。(交易表)

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/

10-12 17:23