在我的 Rails 应用程序的 PostgreSQL 数据库中有包含过去 10 年的每小时价格的记录:
10(24 x 365) 其中:“12/31/2012 01:00:00”、“11.99”
以下查询按天对价格进行分组,对这些每日分组中的价格进行平均以创建每日平均价格,并返回每一天的“day”、“daily average”对:
HourlyPrice.average(:price, :group => "DATE_TRUNC('day', date)")
问题是,我的源数据中的每小时价格实际上反射(reflect)了前一小时的价格。因此,在我的数据源 .CSV 中,一天从 01:00:00 开始,到 24:00:00 结束。
这与 PostgreSQL 喜欢在其 DateTime 列中保存记录的方式相冲突。导入 CSV 数据后,PostgreSQL 将我包含时间 24:00:00 的记录转换为第二天的 00:00:00。
这会影响我上面的平均查询的准确性。为了修复查询,我仍然想按天分组,但偏移 1 小时。因此,平均范围从 01:00:00 开始,到第二天 00:00:00 的值结束。
是否可以调整上述查询以反射(reflect)这一点?
最佳答案
在对其应用 DATE_TRUNC
函数之前,您可以从 date
中减去一小时,如下所示:
HourlyPrice.average(:price, :group => "DATE_TRUNC('day', date - INTERVAL '1 hour')")
关于sql - 高级查询日期分组困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14151561/