gpt4 book ai didi

sql - 如何获得时间戳的平均值?数据库

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:24 26 4
gpt4 key购买 nike

我目前正在使用这个:

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)
;

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

表格是这样的

。 id sensors_on_site_id tank_level 时间戳
[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
例如,如果我只想从中取平均值,我的原始查询将是

选择平均(坦克级别)
从 (
选择 row_number() over (order by id) as rn, tank_level
来自 data_tanksensor
其中 sensors_on_site_id = 91
) 秒
分组依据 (rn + ((选择计数 (*)/2 来自 data_tanksensor,其中 sensors_on_site_id = 91)-1))/(选择计数 (*)/2 来自 data_tanksensor,其中 sensors_on_site_id = 91)
;
粗略的查询缺少将平均时间戳的部分,这是我想要弄清楚的。但我试图获得的预期结果是

平均时间戳
没有时区的 double 时间戳
.....................................
6.833333 2017-03-24 11:21:31...
5.433333 2017-03-24 11:36:31...
同样,这只是示例数据,一次平均的行数有数百个。谢谢

最佳答案

您可以将时间戳转换为 unix 时间戳,对值求和,除以值的数量并转换回时间戳。一个快速的工作示例:

with
__ts as(
select unnest(array[
'2015-11-22 09:31:00', '2015-11-22 09:32:00', '2015-11-23 11:31:00', '2015-11-23 11:32:00',
'2015-11-23 11:34:00', '2015-11-23 15:28:00', '2015-11-23 15:29:00', '2015-11-24 10:49:00',
'2015-11-24 10:50:00', '2015-11-24 11:18:00'
]::timestamp without time zone[]) as ts
)
select
to_timestamp(sum(extract(epoch from ts)) / (select count(1) from __ts))
from
__ts

关于sql - 如何获得时间戳的平均值?数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com