SQL按时间戳间隔获取平均值

Posted

技术标签:

【中文标题】SQL按时间戳间隔获取平均值【英文标题】:SQL get avg values by timestamp interval 【发布时间】:2021-03-21 07:36:21 【问题描述】:

我的表格格式如下:

数据=[ID、值、时间戳]

即:

ID | value | timestamp
1  |  20   | 2020-06-16 03:51:55
2  |  30   | 2020-06-16 04:00:00
3  |  10   | 2020-06-16 04:15:17
4  |  12   | 2020-06-16 05:23:35

我想按 30 分钟的时间戳间隔检索平均值。在上面的示例中,查询应该返回 2 个平均值 20 和 12。这可能吗?

【问题讨论】:

你的 DBMS 是什么? 我的 DBMS 是 spark sql Edit 问题并展示您尝试过的内容并详细解释问题所在(错误消息、意外结果等)。 请解释一下“b时间戳间隔30分钟”是什么意思?如果第三行的时间是 04:22:00 怎么办? 【参考方案1】:

我不熟悉 Spark SQL 方言,但您可以使用下一个方法: 例如 PostgreSQL 查询:

create table t1 (ID serial, value int, "timestamp" timestamp);

insert into t1 (value, "timestamp") values
(20, '2020-06-16 03:51:55'),
(30, '2020-06-16 04:00:00'),
(10, '2020-06-16 04:15:17'),
(12, '2020-06-16 05:23:35');

select 
    avg(value) as avg_value, 
    -- convert date to unixtime divide by 1800 (seconds in 30 mins)
    -- round it and use value for groupping
    to_timestamp(round(extract(epoch from "timestamp")/1800)*1800)  as min30
from t1
group by min30;

PostgreSQL fiddle

【讨论】:

以上是关于SQL按时间戳间隔获取平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何平均时间间隔?

Python - 按时间间隔分组的时间加权平均 Pandas

数组中时间戳之间的平均间隔

有没有办法从 min(date) 开始按 30 天的间隔对时间戳数据进行分组并将它们添加为列

数据分析处理库Pandas——时间

PostgreSQL 中基于时间戳的移动平均线