Заполнение пробелов в SQL по идентификатору

# #sql #google-bigquery

Вопрос:

Я пытаюсь заполнить пробел в двух сценариях. Я могу сделать это с одной группой, но не уверен с несколькими

данные:

 Order ID Amount 1 NULL NULL 2 A 500 3 NULL NULL 4 A 700 1 B 1000 2 NULL NULL 3 NULL NULL 4 B 1500  

Целевой Результат

 Order ID Amount 1 A 500 2 A 500 3 A 700 4 A 700 1 B 1000 2 B 1500 3 B 1500 4 B 1500  

Ответ №1:

Рассмотрим следующий подход

 select * except(amount),   first_value(amount ignore nulls) over win as amount from (select distinct `order` from your_table where not `order` is null),  (select distinct id from your_table where not id is null) left join your_table using(`order`, id) window win as (partition by id order by `order` rows between current row and unbounded following)   

если применить к образцам данных в вашем вопросе — вывод будет

введите описание изображения здесь

Комментарии:

1. Я применил это и получаю странный дополнительный столбец, когда пытаюсь ввести другой столбец, поэтому в дополнение к порядку, если бы был столбец шага, такой как Шаг 1 Шаг 2 Шаг 3 шаг 4 Шаг 4 Шаг 4

2. @Джастин, Это похоже на другой вопрос. Я предлагаю вам поднять для этого новый вопрос.