2

在我的 Rails 应用程序的 PostgreSQL 数据库中,记录了过去 10 年的每小时价格:

10 (24 x 365) 其中:“12/31/2012 01:00:00”、“11.99”

以下查询按天对价格进行分组,对这些每日分组中的价格进行平均以创建每日平均价格,并返回每一天的“天”、“每日平均”对:

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

问题是,我的源数据中的每小时价格实际上反映了前一小时的价格。因此,在我的数据源 .CSV 中,这一天从 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之前减去一小时,如下所示:DATE_TRUNC

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