在BigQuery / Standard SQL中使用数组确定给定日期的状态

时间:2019-04-21 21:59:16

标签: sql arrays google-bigquery

对于日历年的每一天,我需要检查记录的状态,并根据状态将其标记为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"
;`

我被困住了。我无法引用statushistorystatushistory.statusstatushistory.date中的特定字段。当我尝试引用它们时,它给了我它们在数组中的错误。

即使我知道如何引用它们,也需要将cdate放在正确的两个statushistory.date之间,以确定状态。

上面提到的_id具有4个状态和4个日期。

我的目标是在cdate

期间状态为“已发布”的情况下创建1

enter image description here

1 个答案:

答案 0 :(得分:1)

我不清楚您想做什么。但是,我怀疑这与获取每个日期的状态有关。

如果是这样,您可以在子查询中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'