圆形Timstamp在bigquery中间隔最近15分钟

din*_*nta 4 google-bigquery

我试图通过bigquery标准sql将datetime字段舍入到最接近的15分钟间隔,尝试datetime_trunc但是它不允许舍入到最接近的X分钟

2018-10-24 01:05:00 to 2018-10-24 01:00:00
2018-10-24 01:08:00 to 2018-10-24 01:15:00
2018-10-24 01:12:00 to 2018-10-24 01:15:00
Run Code Online (Sandbox Code Playgroud)

在bq标准sql中实现上述转换的任何其他方法?

谢谢,

Mik*_*ant 8

下面是BigQuery标准SQL(假设您的字段是TIMESTAMP类型,因为它在问题标题中说明)

TIMESTAMP_SECONDS(900 * DIV(UNIX_SECONDS(dt_from) + 450, 900))   
Run Code Online (Sandbox Code Playgroud)

您可以使用问题中的虚拟数据进行测试,玩耍

#standardSQL
WITH `project.dataset.table` AS (
  SELECT TIMESTAMP '2018-10-24 01:05:00' dt_from UNION ALL
  SELECT '2018-10-24 01:08:00' UNION ALL
  SELECT '2018-10-24 01:12:00'
)
SELECT dt_from, TIMESTAMP_SECONDS(900 * DIV(UNIX_SECONDS(dt_from) + 450, 900)) dt_to
FROM `project.dataset.table`  
Run Code Online (Sandbox Code Playgroud)

结果

Row dt_from                 dt_to    
1   2018-10-24 01:05:00 UTC 2018-10-24 01:00:00 UTC  
2   2018-10-24 01:08:00 UTC 2018-10-24 01:15:00 UTC  
3   2018-10-24 01:12:00 UTC 2018-10-24 01:15:00 UTC    
Run Code Online (Sandbox Code Playgroud)

如果您的字段是DATETIME类型(如问题本身所述) - 您可以使用上面的版本

#standardSQL
WITH `project.dataset.table` AS (
  SELECT DATETIME '2018-10-24 01:05:00' dt_from UNION ALL
  SELECT '2018-10-24 01:08:00' UNION ALL
  SELECT '2018-10-24 01:12:00' 
)
SELECT dt_from, DATETIME(TIMESTAMP_SECONDS(900 * DIV(UNIX_SECONDS(TIMESTAMP(dt_from)) + 450, 900))) dt_to
FROM `project.dataset.table`
Run Code Online (Sandbox Code Playgroud)

  • @prideloki 15 分钟是 60*15=900 秒。要四舍五入到最接近的 15 分钟,您将其添加一半(即 900/2=450),然后按照选择语句中的公式进行操作:o)同时,如果您觉得答案有用,请考虑投票 (2认同)