以 yyyymmdd 格式动态调用 "Previous Month" 和 "Current Month" 的 Bigquery Date 语法是什么?

What is the Bigquery Date syntax to call "Previous Month" and "Current Month" in yyyymmdd format dynamically?

如何动态调用 yyyymmdd 格式的“上个月”和“本月”,而无需在查询中明确提及,如下所述

WHERE _TABLE_SUFFIX BETWEEN '2022[PREVIOUSMONTH]01' AND '2022[CURRENTMONTH]07' 采用 yyyymmdd 格式

WHERE _TABLE_SUFFIX 在“20220201”和“20220307”之间,yyyymmdd 格式

在下面的查询中,如何动态调用 [PREVIOUSMONTH] AND [CURRENTMONTH]in yyyymmdd 格式而不在查询中明确提及 '20220201' AND '20220307'

select 
stream_id,app_info.id,app_info.version,  
event_date,event_name, 
  param1.value.string_value as category,
  param2.value.string_value as action,
  param3.value.string_value as label,
  count(1) as totalevent,count( distinct user_pseudo_id ) as uniqueusers
From `abc_150838411.events_*`,
UNNEST(event_params) as param1,
UNNEST(event_params) as param2,
UNNEST(event_params) as param3
WHERE _TABLE_SUFFIX BETWEEN '20220201' AND '20220307'
and param1.key='category' 
and param2.key='action' 
and param3.key='label' 
group by 1, 2, 3, 4, 5,6,7,8
order by totalevent desc  

请注意:

需要以 yyyymmdd 格式填充月份语法

在“20220201”和“20220307”之间 _TABLE_SUFFIX

在“2022[PopulatePreviousMonthUsingMonthSyntax]01”和“2022[PopulateCurrnetMonthSyntax]07”之间_TABLE_SUFFIX

请问。帮忙谢谢

您想:

  • 更改日期格式 = FORMAT_DATE
  • 当前月份的
  • = 截断 DATE_TRUNC CURRENT_DATEMONTH
  • 或上个月的 = 相同但截断了 1 个月前 CURRENT_DATEMONTH
SELECT
  FORMAT_DATE("%Y%m%d",DATE_TRUNC(CURRENT_DATE(),MONTH)) AS current_month,
  FORMAT_DATE("%Y%m%d",DATE_TRUNC( DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH),MONTH)) AS previous_month

这给出:

考虑捷径

SELECT
  FORMAT_DATE("%Y%m01", CURRENT_DATE()) AS current_month,
  FORMAT_DATE("%Y%m01", DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)) AS previous_month    

有输出

根据您的要求,考虑以下查询,其中 dateyear 是硬编码的,而 month 是动态的。我已经测试了查询,它在提供的时间范围内给出了结果。该查询基于@Mikhail 的回答和您的 .

SELECT
  *
FROM
  `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN FORMAT_DATE("2022%m07", DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH))
  AND
  FORMAT_DATE("2022%m01", CURRENT_DATE())
LIMIT
  10;