如何获取时间戳的平均值?PostgreSQL

Der*_*rek 5 sql database postgresql

我目前正在使用这个:

select avg(tank_level)
from (
    select row_number() over (order by id) as rn, tank_level
    from data_tanksensor
    where sensors_on_site_id = 91
) s
group by (rn + ((Select count(*)/10 From data_tanksensor where sensors_on_site_id = 91)-1))/ (Select count(*)/10 From data_tanksensor where sensors_on_site_id = 91)
;  
Run Code Online (Sandbox Code Playgroud)

从表中获取 10 个平均值。该表还有时间戳,我想获取 10 个平均 Tank_level 中每一个的平均时间戳。这用于创建历史图表。如果有人可以帮助我修改此查询以获取平均时间戳,我将不胜感激。提前致谢。

桌子看起来像这样

. id sensors_on_site_id tank_level timestamps [PK] bigint integer double precision time without time zone ........... .................. ................ ...................... 12345 91 7.5 2017-03-24 11:16:31.143362 12346 91 7.6 2017-03-24 11:21:31.148639 12347 91 5.4 2017-03-24 11:26:31.155739 12348 91 3.6 2017-03-24 11:31:31.156478 12349 91 8.5 2017-03-24 11:36:31.157303 12350 91 4.2 2017-03-24 11:41:31.172008 例如,如果我只想计算平均值,我的原始查询将是

select avg(tank_level) from ( select row_number() over (order by id) as rn, tank_level from data_tanksensor where sensors_on_site_id = 91 ) s group by (rn + ((Select count(*)/2 From data_tanksensor where sensors_on_site_id = 91)-1))/ (Select count(*)/2 From data_tanksensor where sensors_on_site_id = 91) ; 粗略地说,查询缺少平均时间戳的部分,这就是我想要弄清楚的。但我想要得到的预期结果是

avg timestamp double precision timestamp without time zone ................ ........................... 6.833333 2017-03-24 11:21:31... 5.433333 2017-03-24 11:36:31... 同样,这只是示例数据,平均的行数一次为数百行。谢谢

Der*_*rek 1

select to_timestamp(avg(timestamps)) "timestamps", avg(tank_level) "TankLevel" from ( select row_number() over (order by id) as rn, tank_level, extract(epoch from timestamps) "timestamps" from data_tanksensor where sensors_on_site_id = 91 ) s group by (rn + ((Select count(*)/10 From data_tanksensor where sensors_on_site_id = 91)-1))/ (Select count(*)/10 From data_tanksensor where sensors_on_site_id = 91) order by timestamps asc ; 弄清楚了谢谢大家的例子