在 BigQuery 中对日期进行分组时出现 DATE_ADD 或 DATE_DIFF 错误

Posted

技术标签:

【中文标题】在 BigQuery 中对日期进行分组时出现 DATE_ADD 或 DATE_DIFF 错误【英文标题】:DATE_ADD or DATE_DIFF error when grouping dates in BigQuery 【发布时间】:2019-08-04 15:43:56 【问题描述】:

尽我所能尝试搜索,我仍然无法弄清楚这一点,尽管https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date_add 提供了一些帮助,但我仍然卡住了。我正在尝试将日期分组为几周,但不断收到代码下方的两个错误之一。

day         bitcoin_total   dash_total
2009-01-03  1               0
2009-01-09  14              0
2009-01-10  61              0

理想的结果是一周开始的日期(可以是星期一或星期日,以哪个为准)

day         bitcoin_total   dash_total
2008-12-28  1               0
2009-01-04  75              0

这似乎是一个常见问题,但大多数答案都是针对 T-SQL 而不是标准 SQL。我的日期列是 Date 类型,但这是返回类型,所以这应该不是问题。

DATE_ADD(week, DATE_DIFF(week, 0, day), 0) Date
FROM
my_table
GROUP BY
DATE_ADD(week, DATE_DIFF(week, 0, day), 0) 
ORDER BY
DATE_ADD(week, DATE_DIFF(week, 0, day), 0)

如果我将 DATE_ADD 函数中的 date_expression 更改为 DATE "2009-01-01",则上述代码会出现 Unrecognized name: week at [2:10] 错误或 Error: Expected INTERVAL expression at [2:29]

【问题讨论】:

【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT DATE_TRUNC(day, WEEK) AS day, 
  SUM(bitcoin_total) AS bitcoin_total, 
  SUM(dash_total) AS dash_total
FROM `project.dataset.table`
GROUP BY day   

如果应用到您的问题中的示例数据,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT DATE '2009-01-03' day, 1 bitcoin_total, 0 dash_total UNION ALL
  SELECT '2009-01-09', 14, 0 UNION ALL
  SELECT '2009-01-10', 61, 0 
)
SELECT DATE_TRUNC(day, WEEK) AS day, 
  SUM(bitcoin_total) AS bitcoin_total, 
  SUM(dash_total) AS dash_total
FROM `project.dataset.table`
GROUP BY day   

输出将是

Row day         bitcoin_total   dash_total   
1   2008-12-28  1               0    
2   2009-01-04  75              0    

【讨论】:

如果回答有帮助,也考虑投票:o) 我有/我有。感谢您及时的回复。澄清一下,BigQuery 标准 SQL 是它自己的语言吗? 它基于 SQL 2011 标准,具有查询嵌套和重复数据等扩展功能 好的,我正在搜索 SQL 2011 的解决方案,再次感谢。

以上是关于在 BigQuery 中对日期进行分组时出现 DATE_ADD 或 DATE_DIFF 错误的主要内容,如果未能解决你的问题,请参考以下文章

将时间戳转换为特定时区然后在 bigquery 中将其转换为日期时出现问题

BigQuery 时间戳偏移量

在 BigQuery 中对具有 DateTime 值的字符串字段进行范围查询

在将 Google BigQuery 作为源数据库的 Metabase 中使用字段过滤器时出现无法识别的名称

进行预览时出现 Bigquery API 限制超出错误

在 C++ 中对对进行排序时出现内存错误