sql - 从 bigQuery 上的时间戳聚合变量
问题描述
我计划为每个用户计算最频繁的 part_of_day。在这种情况下,首先,我用 part_of_day 编码时间戳,然后用频率最高的 part_of_day 聚合。我使用 ARRAY_AGG 来计算模式 ()。但是,我不确定如何用 ARRAY_AGG 处理时间戳,因为有错误,所以我的代码结构可能是错误的
SELECT User_ID, time,
ARRAY_AGG(Time ORDER BY cnt DESC LIMIT 1)[OFFSET(0)] part_of_day,
case
when time BETWEEN '04:00:00' AND '12:00:00'
then "morning"
when time < '04:00:00' OR time > '20:00:00'
then "night"
end AS part_of_day
FROM (
SELECT User_ID,
TIME_TRUNC(TIME(Request_Timestamp), SECOND) AS Time
COUNT(*) AS cnt
收到错误:
Syntax error: Expected ")" but got identifier "COUNT" at [19:9]
解决方案
即使您没有共享任何示例数据,我也能够在您的代码中发现一些问题。
我使用了一些基于您在代码中使用的格式和函数创建的示例数据,以保持一致性。以下是代码,没有任何错误:
WITH data AS (
SELECT 98 as User_ID,DATETIME "2008-12-25 05:30:00.000000" AS Request_Timestamp, "something!" AS channel UNION ALL
SELECT 99 as User_ID,DATETIME "2008-12-25 22:30:00.000000" AS Request_Timestamp, "something!" AS channel
)
SELECT User_ID, time,
ARRAY_AGG(Time ORDER BY cnt DESC LIMIT 1)[OFFSET(0)] part_of_day1,
case
when time BETWEEN '04:00:00' AND '12:00:00'
then "morning"
when time < '04:00:00' OR time > '20:00:00'
then "night"
end AS part_of_day
FROM (
SELECT User_ID,
TIME_TRUNC(TIME(Request_Timestamp), SECOND) AS time,
COUNT(*) AS cnt
FROM data
GROUP BY User_ID, Channel, Request_Timestamp
#order by Request_Timestamp
)
GROUP BY User_ID, Time;
首先,请注意我在您的ARRAY_AGG()
方法中更改了列的名称,必须这样做,因为它会导致错误"Duplicate column name"。其次,在你的TIME_TRUNC()
函数之后,它缺少一个逗号,所以你可以选择COUNT(*)
. 然后,在您的GROUP BY
中,您也需要进行分组Request_Timestamp
,因为它既没有聚合也没有分组。最后,在上一个 GROUP BY 中,您需要聚合或分组time
。因此,在这些更正之后,您的代码将在没有任何错误的情况下执行。
注意:Syntax error: Expected ")" but got identifier "COUNT" at [19:9]
您遇到的错误是由于缺少逗号。其他的将在更正后显示。
推荐阅读
- elasticsearch - Kibana 索引模式刷新选项不再存在
- python-imaging-library - 将图像转换为 .ico 文件的问题
- angularjs - Angular 创建具有特定名称的新组件
- spring-boot - Spring Boot JPA计数查询按多个字段
- django - 我可以用 mock.patch('django.utils.timezone.now', mock.Mock(return_value=mocked)) 测试 celery 吗?
- regex - 如何替换字符串的多个子出现
- c++ - 如何在没有现有数据库的情况下缩短现有 C++ 代码
- c# - 在 C# 解决方案中查找并指示未引用的公共属性
- javascript - 当我尝试在 firebase 上部署反应应用程序时,npm run build 返回错误
- javascript - 如果使用如何隐藏
}> 在本机反应