postgresql - 按时间范围聚合

标签 postgresql time aggregation

我有一个数据集,其中包含日期 {yyyy/mm/dd} 和时间 {h,m,s} 以及温度 {float} 作为单独的列。

我想通过平均函数汇总每一天的温度值。

问题是,我不知道如何查询时间属性来表示聚合 {h,m, (0-5)s}{h ,m, (5-10)s}{h,m, (10-15)s} 和...,自动。

最佳答案

select
    day,
    to_char(date_trunc('minute', "time"), 'HH24:MI') as "minute",
    extract(second from "time")::integer / 5 as "range",
    avg(temperature) as average
from (
    select d::date as day, d::time as "time", random() * 100 as temperature
    from generate_series('2012-01-01', '2012-01-03', '1 second'::interval) s(d)
) d
group by 1, 2, 3
order by 1, 2, 3
;

如果你想要所有天的平均值:

select
    to_char(date_trunc('minute', "time"), 'HH24:MI') as "minute",
    extract(second from "time")::integer / 5 as "range",
    avg(temperature) as average
from (
    select d::time as "time", random() * 100 as temperature
    from generate_series('2012-01-01', '2012-01-03', '1 second'::interval) s(d)
) d
group by 1, 2
order by 1, 2
;

我认为您的问题的重要部分是按秒除以范围大小的整数结果进行分组。

关于postgresql - 按时间范围聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12615969/

相关文章:

sql - PSQL 查询将值生成为具有相同唯一 ID 的 json 的 json 数组

javascript - Date.UTC() 获取值 null

sql - 在 Postgres 中使用 max 和 group by 获取第二个属性

node.js - 该字段必须是mongo中的累加器对象

mongodb - 将对象数组中的数组字段连接到 mongodb 聚合中的一个字符串字段中

postgresql - 在 SELECT 生成的行上循环 - 循环变量不存在?

python - docker-compose psql 无法连接到服务器

ruby-on-rails - PostgreSQL 数据库中的整数超出范围

r - 将数字日期转换为自格式以来的小时数

javascript - 比较 JavaScript 中的日期和时间