首页 > 解决方案 > 如何交叉连接但在 BIGQUERY 中使用最新值

问题描述

我在下面有这张表

日期 ID 价值
2021-01-01 1 3
2021-01-04 1 5
2021-01-05 1 10

我希望这样的输出,其中date列总是每天增加,value列将生成最后一个值id

日期 ID 价值
2021-01-01 1 3
2021-01-02 1 3
2021-01-03 1 3
2021-01-04 1 5
2021-01-05 1 10
2021-01-06 1 10

我想我可以使用交叉连接,但我无法获得预期的输出,并认为有一种特殊的语法/逻辑可以解决这个问题

标签: sqlgoogle-bigquery

解决方案


考虑以下方法

select * from `project.dataset.table` 
union all
select missing_date, prev_row.id, prev_row.value
from (
  select *, lag(t) over(partition by id order by date) prev_row
  from `project.dataset.table` t
), unnest(generate_date_array(prev_row.date + 1, date - 1)) missing_date

推荐阅读