按日期格式化和过滤来自GoogleBigQuery的查询结果

h43kikqp  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(339)

我使用python从bigquery数据库中提取数据。数据库中的数据有多年的数据,但我只需要最后两年的数据。此外,“账单日期”列中的数据格式不正确(即2020年8月8日为“20200806”),是int64数据类型。
在一个sql查询中,如何只提取上个月最后一天结束的最近两年的数据?所以在这种情况下,我只需要2018年8月1日至2020年7月31日的数据。任何帮助或文件将不胜感激:)

vom3gejh

vom3gejh1#

您可以操纵日期以获得适当的端点并将其转换为 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)
xqkwcwgp

xqkwcwgp2#

下面是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)

相关问题