Bigquery: есть ли способ округлить метки времени вверх или вниз до ближайшей минуты? - PullRequest
0 голосов
/ 31 января 2019

Я пытался округлить вверх и вниз до ближайшей минуты в Bigquery.Кто-нибудь знает лучшую функцию и метод для достижения этой цели?

user_id     |  created_at
-------------------------------------
14451       | 2019-01-31 04:51:28 UTC
14452       | 2019-01-31 04:51:31 UTC
14453       | 2019-01-31 04:51:59 UTC
14454       | 2019-01-31 04:51:03 UTC

Мой желаемый результат будет следующим:

user_id     |  created_at
-------------------------------------
14451       | 2019-01-31 04:51:00 UTC
14452       | 2019-01-31 04:52:00 UTC
14453       | 2019-01-31 04:52:00 UTC
14454       | 2019-01-31 04:51:00 UTC

Ваша помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Просто добавляет половину из 60 (значение 30) перед выполнением DIV

SELECT user_id ,SEC_TO_TIME(((TIME_TO_SEC(created_at)+30) DIV 60) * 60) FROM `table`
0 голосов
/ 31 января 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT user_id, 
  TIMESTAMP_TRUNC(TIMESTAMP_ADD(created_at, INTERVAL 30 SECOND), MINUTE) created_at
FROM `project.dataset.table`  

Вы можете протестировать, поиграть с этим, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 14451 user_id, TIMESTAMP '2019-01-31 04:51:28 UTC' created_at UNION ALL
  SELECT 14452, '2019-01-31 04:51:31 UTC' UNION ALL
  SELECT 14453, '2019-01-31 04:51:59 UTC' UNION ALL
  SELECT 14454, '2019-01-31 04:51:03 UTC' 
)
SELECT user_id, 
  TIMESTAMP_TRUNC(TIMESTAMP_ADD(created_at, INTERVAL 30 SECOND), MINUTE) created_at
FROM `project.dataset.table`

с результатом

Row user_id created_at   
1   14451   2019-01-31 04:51:00 UTC  
2   14452   2019-01-31 04:52:00 UTC  
3   14453   2019-01-31 04:52:00 UTC  
4   14454   2019-01-31 04:51:00 UTC  
...