首页 > 解决方案 > 在配置单元中按日期重复以前的值

问题描述

我有 2 个表 - 日期和数据,数据如下:表:日期

Date
1/02/2020
2/02/2020
3/02/2020
4/02/2020
5/02/2020
6/02/2020
7/02/2020
8/02/2020
9/02/2020
10/02/2020

表:数据

Date    Id  Amount
1/02/2020   1   10
3/02/2020   1   30
10/02/2020  1   50
2/02/2020   2   5
6/02/2020   2   10
9/02/2020   2   20

预期成绩:

Date    Id  Amount
1/02/2020   1   10
2/02/2020   1   10
3/02/2020   1   30
4/02/2020   1   30
5/02/2020   1   30
6/02/2020   1   30
7/02/2020   1   30
8/02/2020   1   30
9/02/2020   1   30
10/02/2020  1   50
2/02/2020   2   5
3/02/2020   2   5
4/02/2020   2   5
5/02/2020   2   5
6/02/2020   2   10
7/02/2020   2   10
8/02/2020   2   10
9/02/2020   2   20

我曾尝试使用 PARTITION OVER 但从 Dates 表中获取重复的值而不是所有日期,因此没有得到理想的结果。如果您能对 Hive SQL 中的代码提供帮助,我们将不胜感激。

标签: sqlhive

解决方案


使用 across join生成行。然后left join将两个表结合起来。最后用于last_value()引入缺失值:

select d.date, i.id,
       last_value(amount, TRUE) over (partition by id order by d.date) as amount
from date d cross join
     (select distinct id from data) i left join
     data t
     on d.date = t.date and i.id = t.id;

带有第二last_value()个参数的 忽略NULL值,因此它将“返回”以获取最新的非NULL值。


推荐阅读