В BigQuery вы можете использовать generate_date_array()
и агрегирование для получения строк:
select i.id, the_date, t.value
from (select id, min(date) as min_date, max(date) as max_date
from t
group by id
) i cross join
unnest(generate_date_array(min_date, max_date)) the_date left join
t
on t.id = i.id and g.date = the_date;
Вы можете заполнить значения различными способами. Кажется, ваши данные увеличиваются, поэтому будет работать совокупный максимум:
select i.id, the_date,
max(t.value) over (partition by i.id order by the_date) as value
from (select id, min(date) as min_date, max(date) as max_date
from t
group by id
) i cross join
unnest(generate_date_array(min_date, max_date)) the_date left join
t
on t.id = i.id and g.date = the_date;
В качестве альтернативы вы можете использовать:
coalesce(value,
last_value(value ignore nulls) over (partition by i.id order by thedate)
) as value