SQL 查询时间序列以计算平均值
SQL query on a time series to calculate the average
我有两个 table:
temperature table 其中包含每 15 分钟采集一次的温度时间序列
时间table
我需要一个 SQL 查询,这将允许一个平均组按 15 分钟计算几天的 avry 值
有人能帮帮我吗?
示例: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
请帮帮我
每个季度创建一个组,然后使用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
如果您的测试用例是您真实情况的任何指示,那么您的时间戳已经精确地以 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" 作为标识符。
我有两个 table:
temperature table 其中包含每 15 分钟采集一次的温度时间序列
时间table
我需要一个 SQL 查询,这将允许一个平均组按 15 分钟计算几天的 avry 值
有人能帮帮我吗?
示例: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
请帮帮我
每个季度创建一个组,然后使用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
如果您的测试用例是您真实情况的任何指示,那么您的时间戳已经精确地以 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" 作为标识符。