所以我有下面两个表
Table A
Date num
01-16-15 10
02-20-15 12
03-20-15 13
Table B
Date Value
01-02-15 100
01-03-15 101
. .
01-17-15 102
01-18-15 103
. .
02-22-15 104
. .
03-20-15 110
我想创建一个在 impala 中具有以下输出的表
Date Value
01-17-15 102*10
01-18-15 103*10
02-22-15 104*12
. .
. .
因此,我们的想法是,我们只考虑 01-16-15 和 02-20-15 之间的日期,以及 02-20-15 和 03-20-15 之间的日期。并使用该期间开始日期的数字,例如 01-16-15,并将其乘以该期间的每一天,即 1-16 到 2-20。
我知道应该通过加入来完成,但我不确定在这种情况下如何加入。
谢谢!
嗯。在标准 SQL 中你可以这样做:
select b.*,
(select a.num
from a
where a.date <= b.date
order by a.date desc
fetch first 1 row only
) * value as new_value
from b;
我认为这不符合范围条件,但我不明白你对此的描述。
我也不知道Impala是否支持相关子查询。对于复杂数据,另一种选择可能更快:
with ab as (
select a.date, a.value as a_value, null as b_value, 'a' as which
from a
union all
select b.date, null as a_value, b_value, 'b' as which
from b
)
select date, b_value * a_real_value
from (select ab.*,
max(a_value) over (partition by a_date) as a_real_value
from (select ab.*,
max(a.date) over (order by date, which) as a_date
from ab
) ab
) ab
where which = 'b';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)