在标准SQL BigQuery中舍入到最接近的MINUTE或HOUR

Pen*_*m10 2 google-bigquery

有一些简单的短期的方式来圆作为注意到T-SQL最接近的分钟数这里

我希望获得与标准SQL相同的简短语法。

小智 10

问题中有一些含糊之处。在这种情况下,“round”的使用可以解释为“截断到最接近的小时或分钟”,到目前为止的模式已经证明了这一点,并且可能比floor它有更接近的类比round。但是,在某些合理的情况下,人们可能希望真正将时间戳“舍入”到最接近的小时\xe2\x80\x94,即模拟操作round。这当然是可行的:

\n\n
with events as\n(\n  select timestamp(\'2020-04-21T18:21:55.967+00:00\') as event_at\n  union all\n  select timestamp(\'2020-04-21T18:51:55.967+00:00\') as event_at\n)\nselect event_at\n  , timestamp_trunc(event_at, hour) as event_truncated_hour\n  , timestamp_trunc(timestamp_add(event_at, interval 30 minute), hour) as event_rounded_hour\nfrom events\n
Run Code Online (Sandbox Code Playgroud)\n\n

这产生

\n\n
| event_at                         | event_truncated_hour           | event_rounded_hour            |\n|----------------------------------|--------------------------------|-------------------------------|\n| 2020-04-21T18:21:55.967+00:00    | 2020-04-21T18:00:00.000+00:00  | 2020-04-21T18:00:00.000+00:00 |\n| 2020-04-21T18:51:55.967+00:00    | 2020-04-21T18:00:00.000+00:00  | 2020-04-21T19:00:00.000+00:00 |\n
Run Code Online (Sandbox Code Playgroud)\n


Mik*_*ant 7

以下是BigQuery标准SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT DATETIME '2018-01-01 01:05:56' input_datetime 
)
SELECT input_datetime,
  DATETIME_TRUNC(input_datetime, MINUTE) rounded_to_minute,
  DATETIME_TRUNC(input_datetime, HOUR) rounded_to_hour
FROM `project.dataset.table`   
Run Code Online (Sandbox Code Playgroud)

结果为

Row     input_datetime          rounded_to_minute       rounded_to_hour  
1       2018-01-01T01:05:56     2018-01-01T01:05:00     2018-01-01T01:00:00  
Run Code Online (Sandbox Code Playgroud)

对于TIMESTAMPTIME数据类型-您可以分别使用- TIMESTAMP_TRUNC()TIME_TRUNC()