【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-14
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 1970-01-01
        相关资源
        最近更新 更多