繁体   English   中英

SQL查询时间序列以计算平均值

[英]SQL query on a time series to calculate the average

我有两个表:

温度表,其中包含每15分钟获取的温度时间序列 在此处输入图片说明

时间表

在此处输入图片说明

我需要一个SQL查询,该查询将允许平均15分钟的平均分组数天

有人可以帮我吗?

例如:3天

day1:00:00->10 ; 00:15->11 ;00:30->9......;23:45->12
day2:00:00->9 ; 00:15->2 ;00:30->5......;23:45->4
day3:00:00->8 ; 00:15->10 ;00:30->8......;23:45->5

如何计算:

avarage1 =10+9+8/3
avarage2 =11+2+10/3
avarage3=9+5+8/3
...
avarage96=12+4+5/3

请帮帮我

如果您的测试用例可以表明您的真实情况,则您的时间戳记恰好间隔15分钟,并且根本不需要trunc() 只是一个简单的GROUP BY / avg()

SELECT  date_time, avg(value) As avg_val
FROM    temperature te
JOIN    "time" ti USING (id_date)
WHERE   date_time >= '2015-02-24'::date
AND     date_time <  '2015-02-28'::date
GROUP   BY 1;

从'2015-02-24':: date到'2015-02-27':: date选择3天的时间片。 请注意我如何包括下限和排除上限。

另外:请勿将保留时间“ time”用作标识符。

为每个季度创建一个组,然后使用avg()聚合函数计算每组的平均温度:

select  years
,       months
,       days
,       hours
,       floor(minutes / 15)
,       avg(value)
from    Temperature te
join    Time ti
on      te.id_date = ti.id
group by
        years
,       months
,       days
,       hours
,       floor(minutes / 15)

或者,一种更明确的替代方法每季度创建一个组:

group by
        years
,       months
,       days
,       hours
,       case
        when minutes < 15 then 1
        when minutes < 30 then 2
        when minutes < 45 then 3
        else 4
        end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM