如何将每小时数据汇总到PostgreSQL中的每日,每周,每月和每年的值?

时间:2017-06-12 19:57:31

标签: sql postgresql aggregate average

我的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中找到每日,每周,每月和每年的平均值?

1 个答案:

答案 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()将其转换为日期。