teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

加筆修正

2017/02/14 11:25

投稿

退会済みユーザー
answer CHANGED
@@ -5,4 +5,10 @@
5
5
  date_trunc()かけたあとでもtimestamp型を維持することに注意です。
6
6
 
7
7
  `date_part(text, timestamp)`だと、任意の日付要素を抽出してdouble precision型を返します。
8
- こちらでもgroup by句に使えます。
8
+ こちらでもgroup by句に使えます。
9
+
10
+ ちなみに、SELECT文のたびにこの手の精度丸め関数を使うのは
11
+ 動くけど少々時間がかかりやすいです。
12
+ テーブル構造を変更できるなら、
13
+ 抽出する粒度に合わせたグルーピング用データ(年とか月とか)もカラムに持たせて、
14
+ インデックスをかけると良いでしょう。

1

加筆修正

2017/02/14 11:25

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,8 @@
1
1
  PostgreSQLであれば、`date_trunc(text, timestamp)`関数で任意の精度に切り捨てることが出来るので、
2
2
  `date_trunc('day', timestamp '2001-02-16 20:38:40')`は「2001-02-16」になりますし、
3
3
  `date_trunc('month', timestamp '2001-02-16 20:38:40')`は「2001-02-01」になります。
4
- これをgroup by句に加えれば、任意の精度に切り捨てて足し込んだり平均を取ったりできますね。
4
+ これをgroup by句に加えれば、任意の精度に切り捨てて足し込んだり平均を取ったりできますね。
5
+ date_trunc()かけたあとでもtimestamp型を維持することに注意です。
6
+
7
+ `date_part(text, timestamp)`だと、任意の日付要素を抽出してdouble precision型を返します。
8
+ こちらでもgroup by句に使えます。