2

私の Rails アプリの PostgreSQL DB には、過去 10 年間の時間料金を含むレコードがあります。

これらの 10 (24 x 365): "12/31/2012 01:00:00"、"11.99"

次のクエリは、日ごとに価格をグループ化し、日ごとのグループの価格を平均して日別の価格平均を作成し、各日の「日」と「日平均」のペアを返します。

   HourlyPrice.average(:price, :group => "DATE_TRUNC('day', date)")

問題は、ソース データの 1 時間あたりの料金が実際には前の 1 時間の料金を反映していることです。したがって、私のデータ ソース .CSV では、1 日は 01:00:00 に始まり、24:00:00 に終わります。

これは、PostgreSQL が DateTime 列にレコードを保存する方法と競合します。CSV データをインポートすると、PostgreSQL は時刻 24:00:00 を含むレコードを翌日の 00:00:00 に変換します。

これにより、上記の平均化クエリの精度が低下します。クエリを修正するために、日ごとにグループ化したいのですが、オフセットを 1 時間にします。したがって、平均範囲は 01:00:00 から始まり、翌日の 00:00:00 の値で終わります。

これを反映するように上記のクエリを調整することは可能ですか?

4

1 に答える 1

1

次のように、関数をdate適用する前に1 時間を差し引くことができます。DATE_TRUNC

HourlyPrice.average(:price, :group => "DATE_TRUNC('day', date - INTERVAL '1 hour')")
于 2013-01-04T07:29:12.727 に答える