【问题标题】:Formatting and filtering query results by date from Google BigQuery按日期格式化和过滤来自 Google BigQuery 的查询结果
【发布时间】:2020-11-26 20:12:24
【问题描述】:
我正在使用 Python 从 BigQuery 数据库中提取数据。数据库中的数据有多年的数据,但我只需要最近两年。此外,“bill_date”列中的数据格式不正确(即 2020 年 8 月 8 日为“20200806”)并且是 int64 dtype。
在 SQL 查询中,如何仅提取以上个月最后一天结束的最近两年的数据?因此,在这种情况下,我只需要 2018 年 8 月 1 日至 2020 年 7 月 31 日的数据。任何帮助或文档将不胜感激:)
【问题讨论】:
标签:
sql
python-3.x
google-bigquery
【解决方案1】:
您可以操纵日期以获取适当的结束点并转换为int64:
where bill_date < cast(format_date('%Y%m%d', date_trunc(current_date, month)) as int64) and
bill_date >= cast(format_date('%Y%m%d', date_add(date_trunc(current_date, month), interval -24 month)) as int64)
【解决方案2】:
以下是 BigQuery 标准 SQL
#standardSQL
SELECT <columns>
FROM `project.dataset.table`
WHERE PARSE_DATE('%Y%m%d', FORMAT('%i', bill_date))
BETWEEN DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 2 YEAR)
AND DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 1 DAY)
如果你想让它不那么冗长,你可以重构上面的代码
#standardSQL
SELECT <columns>
FROM `project.dataset.table`,
UNNEST([DATE_TRUNC(CURRENT_DATE(), MONTH)]) month_start
WHERE PARSE_DATE('%Y%m%d', FORMAT('%i', bill_date))
BETWEEN DATE_SUB(month_start, INTERVAL 2 YEAR)
AND DATE_SUB(month_start, INTERVAL 1 DAY)