7

我正在尝试为连接到 Google BigQuery 的表格仪表板构建查询。我们有每个月的数据表,但我想在任何给定时间呈现过去 30 天的数据(因此它必须跨越多个表)。我当前的查询给出了错误“需要时间戳文字或显式转换为时间戳”。我一直在寻找有关如何转换为时间戳的帮助,但没有发现任何帮助。这是我的代码。

    SELECT
      DATE(date_time) AS date,
    FROM
      TABLE_QUERY(myTable, "date(concat(left(table_id,4),'-',right(table_id,2),'-','01')) >= '2017-06-01'")
    WHERE 
        DATE(date_time) >= DATE_ADD(day,-30, current_date()) 
        and   DATE(date_time) <= current_date()
    ORDER BY 
        date

任何有关如何使其工作的帮助将不胜感激。

注意:我们使用的是旧版 SQL

4

3 回答 3

23

对于希望使用 BigQuery 标准 SQL 执行相同操作的任何人,这将根据当前日期返回最近 30 天的数据。

https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date_add

SELECT
  date,
FROM
  `<PROJECT>.<DATASET>.<TABLE>` 
WHERE
  Date >= DATE_ADD(CURRENT_DATE(), INTERVAL -30 DAY);
于 2019-04-09T19:54:45.280 回答
4

使用 Google 自己的文档,您似乎需要反转 DATE_ADD() 函数中的参数。该函数应使用以下三个参数调用:

DATE_ADD(<timestamp>,<interval>,<interval_units>)

间隔单位是您引用的时间单位(天、小时、年等)

您收到错误的原因是 Google 正在尝试转换day为某种date格式。

来源:谷歌查询参考

引用文字:

DATE_ADD(时间戳,间隔,interval_units)

将指定的时间间隔添加到 TIMESTAMP 数据类型。可能的 interval_units 值包括 YEAR、MONTH、DAY、HOUR、MINUTE 和 SECOND。如果间隔是负数,则从 TIMESTAMP 数据类型中减去间隔。

例子:

SELECT DATE_ADD(TIMESTAMP("2012-10-01 02:03:04"), 5, "YEAR");

返回:2017-10-01 02:03:04 UTC

SELECT DATE_ADD(TIMESTAMP("2012-10-01 02:03:04"), -5, "YEAR");

返回:2007-10-01 02:03:04 UTC

于 2017-07-24T19:31:51.547 回答
0

根据 google 的文档,格式已更改。

SELECT DATE_ADD(DATE "2008-12-25", INTERVAL 5 DAY) AS five_days_later;
于 2021-10-08T15:29:21.400 回答