首页 > 解决方案 > 加入 2 个表,其中右日期是最大日期小于或等于左日期

问题描述

我有 2 个表要加入 Oracle SQL:

Table A:
DATE        VALUE
02-May-19   19.25
03-May-19   19.35
04-May-19   19.37
06-May-19   19.45
11-May-19   19.30
01-Jun-19   18.79
01-Jul-19   19.33

Table B:
DATE        VALUE
02-May-19   11.08
01-Jun-19   11.09
01-Jul-19   11.11

我可以离开外部加入它们以引入日期匹配的两个值:

select a."date" as "DATE", a.value as a_value, b.value as b_value
from a 
left outer join b on b."date" = a."date"
;

DATE        A_VALUE B_VALUE
02-May-19   19.25   11.08
03-May-19   19.35   
04-May-19   19.37   
06-May-19   19.45   
11-May-19   19.30   
01-Jun-19   18.79   11.09
01-Jul-19   19.33   11.11

我想做的是在表 B 中不存在日期的地方取最佳可用 b.value,其中 b."date" <= a."date"。像这样:

DATE        A_VALUE B_VALUE
02-May-19   19.25   11.08
03-May-19   19.35   11.08
04-May-19   19.37   11.08
06-May-19   19.45   11.08
11-May-19   19.30   11.08
01-Jun-19   18.79   11.09
01-Jul-19   19.33   11.11

标签: sqloracledatejoinouter-join

解决方案


在您的查询中,您可以添加带有忽略空值选项的滞后函数:

select a."date"
     , a."value"
     , coalesce(b."value", lag(b."value") ignore nulls over (order by a."date")) as best_match_value
from a 
left outer join b on b."date" = a."date"
order by a."date";

推荐阅读