在 BigQuery 中减去最近 3 个月的数据

Posted

技术标签:

【中文标题】在 BigQuery 中减去最近 3 个月的数据【英文标题】:Subtracting last 3 months data in BigQuery 【发布时间】:2020-08-20 17:06:11 【问题描述】:

在 BigQuery 中,我正在寻找如何减去过去 3 个月的数据。 这是我目前的想法,但这包括本月的数据,因为它使用 CURRENT_DATE()。

SELECT
*
FROM
ga_123456
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 36 MONTH))
  AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))

假设今天是 8 月 20 日,我正在查找 5 月 1 日到 7 月 31 日之间的日期,这样就可以找到前 3 个月。 谢谢。

【问题讨论】:

表格后缀是日期格式吗? 【参考方案1】:

以下是 BigQuery 标准 SQL

假设你的表名是 `ga_YYYYMMDD

#standardSQL
SELECT *
FROM ga_*
WHERE _TABLE_SUFFIX
  BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 3 MONTH)) 
  AND FORMAT_DATE('%Y%m%d', DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 1 DAY))  

【讨论】:

要获取当前月份的数据,请将第二个子句中的 MONTH 更改为 DAY:AND FORMAT_DATE('%Y%m%d', DATE_SUB(DATE_TRUNC(CURRENT_DATE(), DAY), INTERVAL 1 DAY))【参考方案2】:

如果 _TABLE_SUFFIX 是日期格式:

SELECT * FROM ga_123456

WHERE DATEPART(month,_TABLE_SUFFIX) > DATEPART(month, DATEADD(month, -3, getdate()))
AND DATEPART(yyyy,  _TABLE_SUFFIX) > DATEPART(yyyy, DATEADD(month, -3, getdate()))

否则,使用 CONVERT() 函数调整 _TABLE_SUFFIX

【讨论】:

以上是关于在 BigQuery 中减去最近 3 个月的数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Timestamp php 中减去 6 个月的最简单方法是啥

仅在 MySQL 中返回最近 3 个月的记录

面试题:如何在列级别获得最近3个月的聚合?

如何使用月份名称获取最近 3 个月的计数,如果该月份没有记录需要使用月份名称获取 0 [重复]

如何在 sql server 中获取最近 3 个月的名称

Bigquery:如何根据特定时间范围聚合几列的数据?