在我的Rails应用程序中,我每30分钟运行两个自定义Rake任务。 任务A 从互联网上抓取每小时价格,并将其作为HourlyPrice保存到数据库中。 任务B 进入数据库,在过去七天内每小时收取一小时的价格,并将它们平均为在单独的数据库表中创建新的DailyAveragePrice记录。
但是,在运行任务B时,最后一天(七个)平均价格不正确。
在Excel电子表格中摆弄当天的每小时价格后,我发现任务B产生的平均价格是仅花费过去三个小时并对它们取平均值的结果。
任务B主要通过以下单个查询完成:
averages = HourlyPrice.where('date >= ?', 7.days.ago).average(:price, :group => "DATE_TRUNC('day', date - INTERVAL '1 hour')")
我无法弄清楚为什么会这样?
线索信息
更新 - 发现问题,但如何修复? 线索#2是正确的。这是一个时区问题。我刚刚再次运行任务B(一小时后,还剩2小时,直到UTC日更改),现在只有七天的最后一天平均两个HourlyPrices。
如果有24个HourlyPrice记录可用,我如何才能将上面的查询修正为平均值?