Заполните строки в SQL на основе значения и ключа - PullRequest
0 голосов
/ 01 апреля 2020

Текущий набор данных - содержит даты, идентификатор и значения

ID | Value | Date 
--------------------
X  | 1.1       |  2020/01/14
X  | 2.1       |  2020/01/15
Y  | 0.9       |  2020/01/11
X  | 3.2       |  2020/01/18
Y  | 2.4       |  2020/01/14

`Ожидаемый результат - Ищется стандартный сценарий SQL, который поможет мне заполнить отсутствующие даты, а также перенести / свернуть / скопировать идентификаторы и значения для данный ID. (желательно Bigquery или Spark SQL)

Ожидаемый результат

   ID | Value | Date 
   --------------------
  X  | 1.1       |  2020/01/14
  X  | 2.1       |  2020/01/15
  X  | 2.1       |  2020/01/16
  X  | 2.1       |  2020/01/17
  X  | 3.2       |  2020/01/18
  Y  | 0.9       |  2020/01/11
  Y  | 0.9       |  2020/01/12
  Y  | 0.9       |  2020/01/13
  Y  | 2.4       |  2020/01/14

спасибо

1 Ответ

1 голос
/ 01 апреля 2020

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...