我的PostgreSQL 9.5数据库中有一个包含每小时数据的表my_data
。样本数据如下:
ID Date hour value
1 01/01/2014 1 9.947484
2 01/01/2014 2 9.161652
3 01/01/2014 3 8.509986
4 01/01/2014 4 7.666654
5 01/01/2014 5 7.110822
6 01/01/2014 6 6.765822
7 01/01/2014 7 6.554989
8 01/01/2014 8 6.574156
9 01/01/2014 9 6.09499
10 01/01/2014 10 8.471653
11 01/01/2014 11 11.36581
12 01/01/2014 12 11.25081
13 01/01/2014 13 9.391651
14 01/01/2014 14 6.976655
15 01/01/2014 15 6.574156
16 01/01/2014 16 6.420823
17 01/01/2014 17 6.229156
18 01/01/2014 18 5.577491
19 01/01/2014 19 4.964159
20 01/01/2014 20 6.593323
21 01/01/2014 21 7.321654
22 01/01/2014 22 9.295818
23 01/01/2014 23 8.241653
24 01/01/2014 24 7.014989
25 02/01/2014 1 6.842489
26 02/01/2014 2 7.513321
27 02/01/2014 3 7.244988
28 02/01/2014 4 5.80749
29 02/01/2014 5 5.481658
30 02/01/2014 6 6.669989
.. .. .. ..
等等。数据以相同的方式存在多年。上表的结构是:ID(整数序列不为空),日期(日期)(mm / dd / yyyy),小时(整数),值(数字)。对于如上所述的大量数据,如何在PostgreSQL中找到每日,每周,每月和每年的平均值?
答案 0 :(得分:1)
您使用聚合。例如:
select date, avg(value)
from t
group by date
order by date;
其他人使用date_trunc()
:
select date_trunc('month', date) as yyyymm, avg(value)
from t
group by yyyymm
order by yyyymm;
这假定date
存储为date
数据类型。如果它存储为字符串,则应修复数据中的数据类型。您可以使用to_date()
将其转换为日期。