我正在尝试通过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
还有其他方法可以在bq标准sql中实现上述转换吗?
谢谢
答案 0 :(得分:5)
下面是用于BigQuery标准SQL(假设您的字段为问题标题中所述的TIMESTAMP类型)
TIMESTAMP_SECONDS(900 * DIV(UNIX_SECONDS(dt_from) + 450, 900))
您可以使用问题中的虚拟数据进行测试
#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`
有结果
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
如果您的字段属于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`