Использование массива для определения статуса на заданную дату в BigQuery / Standard SQL - PullRequest
0 голосов
/ 22 апреля 2019

Для каждого дня календарного года мне нужно проверять статус записи и отмечать его как 1 или 0 в зависимости от статуса (Опубликовано = 1, иначе 0). Статус находится в массиве, прикрепленном к каждой записи.

Я соединил таблицу с записями и массивами в таблицу с календарем, содержащим даты для каждого дня данного года.

`select
cdate,
YYYYMM,
_id,
createdat,
case when cdate>=statushistory.date and <statushistory.date and statushistory.status="Published" then 1 else 0 end as active,
statushistory
from bigquery.calendar 
join rs.listings on extract(date from createdat)<=cdate, unnest(statushistory)
where _id ="HGk5HMd6ZxmSRgEJ6"
;`

Я застрял. Я не могу ссылаться на конкретные поля в statushistory: statushistory.status и statushistory.date. Когда я пытаюсь сослаться на них, выдает ошибку, что они находятся в массиве.

Даже если бы я знал, как ссылаться на них, мне нужно поместить cdate между двумя правильными statushistory.date, чтобы определить статус.

Указанный выше _id имеет 4 статуса и 4 даты.

Моя цель - создать 1, если статус был «Опубликован» во время cdate

enter image description here

1 Ответ

1 голос
/ 22 апреля 2019

Мне немного неясно, что именно вы хотите сделать. Однако я подозреваю, что это связано с получением статуса на каждую дату.

Если это так, вы можете unnest в подзапросе:

select c.cdate, c.YYYYMM, l._id, l.createdat,
       (select sh.status
        from unnest(l.statushistory) sh
        where c.cdate >= sh.date and 
              c.cdate <= sh.date
       ) as status_on_date
from bigquery.calendar c join
     rs.listings l
     on extract(date from l.createdat)<= c.cdate 
where l._id = 'HGk5HMd6ZxmSRgEJ6'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...