在sql BigQuery中按天和时间分组

在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

数据需要在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-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