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