Как разделить GENERATE_DATE_ARRAY в дате для одной строки в Google Bigquery, чтобы создать представление даты?

Я пытаюсь создать представление даты, используя MIN и MAX дат из другой таблицы в Google Bigquery. Я столкнулся с GENERATE_DATE_ARRAY и смог создать даты, которые мне нужны, в одном массиве. Однако разделение их на одну дату в каждой строке было сложной задачей.

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

Это код, который я использовал для создания массива, но я застрял на его разделении:

SELECT GENERATE_DATE_ARRAY( 
              MIN(CAST(journaldate AS DATE)), 
              MAX(CAST(journaldate AS DATE))
            )
          AS Period
FROM
dataset.table

person jbev    schedule 08.06.2019    source источник


Ответы (2)


Я думаю, ты хочешь:

SELECT Period
FROM (SELECT MIN(CAST(journaldate AS DATE)) as min_date,
             MAX(CAST(journaldate AS DATE)) as max_date
      FROM dataset.table
     ) t JOIN
     UNNEST(GENERATE_DATE_ARRAY(t.min_date, t.max_date)) period
person Gordon Linoff    schedule 08.06.2019
comment
Большое спасибо. Это нормально работает. Первоначально я пытался отключить весь оператор, но присоединение к массиву UNNEST - это трюк. Спасибо за вашу помощь. - person jbev; 09.06.2019

Другая версия:

#standardSQL
SELECT period FROM UNNEST(
  GENERATE_DATE_ARRAY(
    (SELECT MIN(CAST(journaldate AS DATE)) FROM `project.dataset.table`),
    (SELECT MAX(CAST(journaldate AS DATE)) FROM `project.dataset.table`)
  )
) period
person Mikhail Berlyant    schedule 08.06.2019
comment
И тебе спасибо. Это тоже работает, это было на 0,1 секунды медленнее, но это могло быть просто моим подключением в то время :). 0,1 секунды - это пустяк среди друзей. - person jbev; 09.06.2019