2017-06-12 30 views
0

私はテーブルmy_dataをPostgreSQL 9.5データベースに格納しています。サンプルデータは次のようになります。毎時データを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; 

これはdatedateデータ型として格納されていることを前提としています。文字列として格納されている場合は、データ型をデータに修正する必要があります。 to_date()を使用して日付に変換できます。

+0

最初のケースは正常に機能しましたが、月間平均です。コードで指定されているyyyymmではなく、2014-01-01、2014-02-01、2014-03-01、2014-04-01のような日付がreturednされましたか?日付の値は日付として保存されます。 –

+0

@ JibranKhan。 。 。 'date_trunc()'はその月の最初の日を返します。私はちょうどそれが月を表すことを示すために 'yyyymm'と呼んでいます。 'to_char(date、 'YYYY-MM')'も使用できます。 –

+0

はい、ありがとうございます。それを修正した –

関連する問題