sql - 在配置单元中按日期重复以前的值
问题描述
我有 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 中的代码提供帮助,我们将不胜感激。
解决方案
使用 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
值。
推荐阅读
- rust - 如何在 Vec 等容器中管理 tokio oneshot::channel?
- gstreamer - 如何在 GStreamer 中复制和延迟直播?
- flutter - 如何在 Flutter 的 Row 中自定义对齐组件?
- javascript - 我不明白为什么这不起作用
- sql - Oracle SQL 将 sql 值设置为变量
- datepickerdialog - 如何将 DatePickerDialog 的“年”、“月”和“日”的值保存到领域数据库中?
- python - 嵌套在while循环中的for循环的时间复杂度
- typescript - graphql 查询的 typescript 类型声明错误
- google-apps-script - 提交后从 Google 表单生成 PDF 的问题
- java - Java apache httpclient 通过 socks 代理服务器解析主机名