Как распределить каждое слово по нескольким датам в SQL BigQuery - PullRequest
0 голосов
/ 29 января 2020

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

Поле 1 содержит: A, B

Пример. Каждое слово будет связано со всеми датами. .

New Field        Date
A               01/01/2019
A               02/01/2019
A               03/01/2019
etc

SELECT day
FROM UNNEST(
    GENERATE_DATE_ARRAY(DATE('2017-01-01'), CURRENT_DATE(), INTERVAL 1 DAY)
) AS day

Это генерирует даты, которые мне нужно объединить с A и B

Так что в основном, когда я объединяю, у меня должно быть 2248 строк. 1124 строки для A с разными датами и 1124 строки для B с разными датами.

Спасибо!

1 Ответ

0 голосов
/ 29 января 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT id, letter, day
FROM `project.dataset.table`,
UNNEST(SPLIT(list)) letter, 
UNNEST(GENERATE_DATE_ARRAY('2020-01-01', CURRENT_DATE(), INTERVAL 1 DAY)) day

Вы можете протестировать, поиграть с выше, используя фиктивные данные, основанные на примере из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, 'A,B' list UNION ALL
  SELECT 2, 'C,D,E'
)
SELECT id, letter, day
FROM `project.dataset.table`,
UNNEST(SPLIT(list)) letter, 
UNNEST(GENERATE_DATE_ARRAY('2020-01-01', CURRENT_DATE(), INTERVAL 1 DAY)) day
-- ORDER BY day, id, letter     

с результатом как ниже

Row id  letter  day  
1   1   A       2020-01-01   
2   1   B       2020-01-01   
3   2   C       2020-01-01   
4   2   D       2020-01-01   
5   2   E       2020-01-01   
6   1   A       2020-01-02   
7   1   B       2020-01-02   
8   2   C       2020-01-02   
. . . 
143 2   C       2020-01-29   
144 2   D       2020-01-29   
145 2   E       2020-01-29   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...