您可以在 BigQuery 中使用逻辑运算符根据当前日期 select 不同的日期吗?

Can you use logical operators in BigQuery to select different dates depending on current date?

在我的工作中,我们每周 运行 报告几次,以从 BigQuery 中提取一些信息。

我们运行每周一和周四报告。

我想在这些天将报告自动发送到 运行,并且想知道我是否可以加入一些逻辑,这样如果我 运行 在星期一报告,它 运行s 是前一个工作周(星期日 - 星期六)的数据,如果我 运行 星期四的报告,它 运行s 是到目前为止当前工作周(星期日)的报告- 星期三)。

在另一份报告中,我只 运行 上周的报告,我使用:

select last_day(current_date - 14, week(monday)) as lw_week_start, last_day(current_date - 7, week(sunday)) as lw_week_end

要获取我可以使用的当前周日期:

select last_day (current_date -7, week(monday)), (current_date -1)

那么我可以将这两个都放在我的查询中,并使用某种逻辑说,如果我 运行 在星期一使用第一个,如果我在星期四 运行 , 使用第二个?

谢谢

您可以将时间段定义为 CTE(或者如果您更喜欢作为变量),然后在查询中使用该信息:

with period as (
      select (case when extract(dayofweek from current_date) = 2
                   then last_day(date_add(current_date, interval -14 day), week(monday)) 
                   when extract(dayofweek from current_date) = 5
                   then last_day(date_add(current_date, interval -7 day), week(monday))                    
              end) as lw_week_start,
             (case when extract(dayofweek from current_date) = 2
                   then last_day(date_add(current_date, interval -7 day), week(sunday) 
                   when extract(dayofweek from current_date) = 5
                   then date_add(current_date, interval -1 day)
                   
              end) as lw_week_end
             
     )
select . . .
from period cross join
     . . .

备注:

  • 这仅包括星期一和星期四。我想你想把它延长到一周的其他日子。

  • current_date 是当前日期 UTC。您可能想要包括您的时区:

      select current_date('America/New_York')
    
/* if current_date is monday then it will return previous week report 
else it will give report for present week for any other current_date */

IF (EXTRACT (DAYOFWEEK FROM CURRENT_DATE)) = 2 THEN
select last_day(current_date - 14, week(monday)) as lw_week_start, last_day(current_date - 7, week(sunday)) as lw_week_end;
ELSE 
select last_day (current_date -7, week(monday)) as week_start, (current_date -1) as previous_day ;
END IF

Scripting on BigQuery

BigQuery Date fuctions

只需在您的 where 子句中添加以下内容

where your_date_column in unnest(
  case extract(dayofweek from current_date())  
  when 2 then generate_date_array(last_day(current_date() - 14, week(monday)), last_day(current_date() - 7, week(sunday))) 
  when 5 then generate_date_array(last_day (current_date() - 7, week(monday)), current_date() - 1)
  end
)