在sql BigQuery中按天和时间分组
数据需要在1分钟间隔内按时间分组。数据:在sql BigQuery中按天和时间分组,sql,time,group-by,google-bigquery,timestamp,Sql,Time,Group By,Google Bigquery,Timestamp,数据需要在1分钟间隔内按时间分组。数据: id time 111 2020-09-01-09:19:00 111 2020-09-01-09:19:04 111 2020-09-01-09:19:08 112 2020-09-01-10:12:05 111 2020-09-02-12:36:54 111 2020
id time
111 2020-09-01-09:19:00
111 2020-09-01-09:19:04
111 2020-09-01-09:19:08
112 2020-09-01-10:12:05
111 2020-09-02-12:36:54
111 2020-09-02-12:36:58
111 2020-09-02-12:37:03
111 2020-09-02-12:37:09
所需输出为:
id time
111 2020-09-01-09:19:08
112 2020-09-01-10:12:05
111 2020-09-02-12:37:09
我试过:
SELECT id, TIMESTAMP(time)
FROM my_table
GROUP BY id, (DATEPART(MINUTE, [time]) / 1)
未找到函数:DATEPART
数据需要在1分钟间隔内按时间分组
对于此问题,您可以使用时间戳\u trunc()
(或日期时间\u trunc()
):
但是,这不会返回您指定的结果。下面是针对BigQuery标准SQL的
#standardSQL
SELECT AS VALUE
ARRAY_AGG(t ORDER BY time DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.my_table` t
GROUP BY id,
TIMESTAMP_SUB(
PARSE_TIMESTAMP('%Y-%m-%d-%H:%M:%S', time),
INTERVAL MOD(UNIX_SECONDS(PARSE_TIMESTAMP('%Y-%m-%d-%H:%M:%S', time)), 2 * 60)
SECOND
)
您可以使用下面示例中的问题的样本数据表来测试、处理上述内容
#standardSQL
WITH `project.dataset.my_table` AS (
SELECT 111 id, '2020-09-01-09:19:00' time UNION ALL
SELECT 111, '2020-09-01-09:19:04' UNION ALL
SELECT 111, '2020-09-01-09:19:08' UNION ALL
SELECT 112, '2020-09-01-10:12:05' UNION ALL
SELECT 111, '2020-09-01-12:36:54' UNION ALL
SELECT 111, '2020-09-01-12:36:58' UNION ALL
SELECT 111, '2020-09-01-12:37:03' UNION ALL
SELECT 111, '2020-09-01-12:37:09'
)
SELECT AS VALUE
ARRAY_AGG(t ORDER BY time DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.my_table` t
GROUP BY id,
TIMESTAMP_SUB(
PARSE_TIMESTAMP('%Y-%m-%d-%H:%M:%S', time),
INTERVAL MOD(UNIX_SECONDS(PARSE_TIMESTAMP('%Y-%m-%d-%H:%M:%S', time)), 2 * 60)
SECOND
)
有输出
Row id time
1 111 2020-09-01-09:19:08
2 112 2020-09-01-10:12:05
3 111 2020-09-01-12:37:09
注意:为了匹配您的预期输出-您应该使用2分钟的间隔而不是1分钟的间隔您真的有这样格式的时间列吗
2020-09-01-09:19:00
?请确认/澄清事实上,这是一个字符串。。。所以你是对的。我刚刚编辑了我的问题。
Row id time
1 111 2020-09-01-09:19:08
2 112 2020-09-01-10:12:05
3 111 2020-09-01-12:37:09