sql—如何计算时间戳列的平均值

yjghlzjz  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(430)

我有一个列叫做timestamp
我想知道所有条目的平均时间戳
这是因为我需要知道用户在我的应用程序中执行某些操作的时间
每个时间戳条目的格式如下

2020-07-13 00:01:12.616 UTC

我不能随便用

SELECT AVG(timestamp) from my_table

因为avg只适用于某些类型
如何计算平均时间?

rbpvctlc

rbpvctlc1#

您可以转换为秒(或毫秒或微秒)并返回到时间戳:

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

lvmkulzt2#

下面是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

相关问题