2017-06-12 215 views
0

我在我的PostgreSQL 9.5數據庫中有一個包含小時數據的表my_data。樣本數據如下:如何在PostgreSQL中將每小時數據彙總爲每日,每週,每月和每年的值?

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

您使用聚合。例如:

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()將其轉換爲日期。

+0

第一個案件工作正常,但月平均。它修復瞭如下日期:2014-01-01,2014-02-01,2014-03-01,2014-04-01而不是代碼中指定的yyyymm?日期值存儲爲日期。 –

+0

@JibranKhan。 。 。 'date_trunc()'返回該月的第一天。我只是稱它爲'yyyymm'來表示它代表了一個月。 'to_char(date,'YYYY-MM')'也可以使用。 –

+0

是的,謝謝。修復 –

相關問題