如何计算TIMESTAMP列的平均值

时间:2020-07-27 21:18:32

标签: sql google-bigquery timestamp

我有一列称为时间戳记

我想从所有条目中了解平均时间戳

这是因为我需要知道用户在什么时间在我的应用中执行一些操作

每个时间戳记条目的格式都是这个

2020-07-13 00:01:12.616 UTC

我不能只使用

SELECT AVG(timestamp) from my_table 

因为AVG仅适用于某些类型

如何计算平均时间?

2 个答案:

答案 0 :(得分:2)

您可以将其转换为秒(或毫秒或微秒),然后再转换为时间戳:

select timestamp_seconds(cast(avg(unix_seconds(timestamp)) as int64))
from my_table

答案 1 :(得分:1)

以下是用于BigQuery标准SQL

我假设您想了解用户活动当天的平均时间或类似情况-根据您的声明 I need to know in which time is where the user do some actions in my app

#standardSQL
SELECT TIMESTAMP_ADD(ts, INTERVAL avg_value MILLISECOND) 
FROM (
  SELECT TIMESTAMP_TRUNC(ts, DAY) ts, CAST(AVG(TIMESTAMP_DIFF(ts, TIMESTAMP_TRUNC(ts, DAY), MILLISECOND)) AS INT64) avg_value
  FROM `project.dataset.table`
  GROUP BY TIMESTAMP_TRUNC(ts, DAY)
)   

您可以使用以下示例中的虚拟数据进行测试,玩耍

#standardSQL
WITH `project.dataset.table` AS (
  SELECT TIMESTAMP '2020-07-13 00:01:12.616 UTC' ts UNION ALL
  SELECT '2020-07-13 00:01:14.616 UTC' UNION ALL
  SELECT '2020-07-13 00:01:15.616 UTC' 
)
SELECT TIMESTAMP_ADD(ts, INTERVAL avg_value MILLISECOND) 
FROM (
  SELECT TIMESTAMP_TRUNC(ts, DAY) ts, CAST(AVG(TIMESTAMP_DIFF(ts, TIMESTAMP_TRUNC(ts, DAY), MILLISECOND)) AS INT64) avg_value
  FROM `project.dataset.table`
  GROUP BY TIMESTAMP_TRUNC(ts, DAY)
)   

有输出

Row f0_  
1   2020-07-13 00:01:14.283 UTC  
相关问题