BigQuery:动态TABLE_DATE_RANGE取决于iso周和星期几

时间:2017-07-19 13:56:48

标签: sql google-bigquery

我对BQ的查询是我每周运行,但并不总是在一周的同一天(有时在星期一,有时在星期二等)。

每周,我都需要查询过去两个日历周的数据:例如假设我们现在在CW 27(isoweek,星期一是第一天),我希望从CW 25的星期一到CW 26的星期日的数据

FROM(TABLE_DATE_RANGE([xxx.ga_sessions_],DATE_ADD(CURRENT_TIMESTAMP(), - 14,' DAY'),DATE_ADD(CURRENT_TIMESTAMP(), - 1,' DAY&# 39;)))可以在星期一每周运行我的查询,但限制是我在不同的工作日运行它。

有没有人有任何想法?任何输入都非常感谢。

提前致谢!

1 个答案:

答案 0 :(得分:1)

下面是BigQuery Legacy SQL,看起来你还在使用

  
#legacySQL
SELECT 
  <your fields here ...>
FROM (TABLE_DATE_RANGE([xxx.ga_sessions_], 
        DATE_ADD(CURRENT_TIMESTAMP(), -14 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY'), 
        DATE_ADD(CURRENT_TIMESTAMP(),  -1 - DAYOFWEEK(CURRENT_TIMESTAMP()) + 2, 'DAY')
      ))

请注意,建议migrate to Standard SQL

  

使用标准SQL,您可以使用_TABLE_SUFFIX伪列上的过滤器实现与TABLE_DATE_RANGE相同的语义

见下面的例子

#standardSQL
SELECT 
  <your fields here ...>
FROM `xxx.ga_sessions_*`
WHERE _TABLE_SUFFIX 
  BETWEEN FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -14 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))
  AND FORMAT_DATE('%Y%m%d',DATE_ADD(CURRENT_DATE(), INTERVAL -1 - EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) + 2 DAY))