Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一种高级查询数据分组Dilemna_Sql_Ruby On Rails_Ruby_Postgresql_Activerecord - Fatal编程技术网

Sql 一种高级查询数据分组Dilemna

Sql 一种高级查询数据分组Dilemna,sql,ruby-on-rails,ruby,postgresql,activerecord,Sql,Ruby On Rails,Ruby,Postgresql,Activerecord,在my Rails应用程序的PostgreSQL DB中,记录了过去10年的每小时价格: 其中10(24 x 365):“2012年12月31日01:00:00”,“11.99” 以下查询按天对价格进行分组,对这些每日分组中的价格进行平均,以创建每日平均价格,并返回每天的“日”、“日平均”对: HourlyPrice.average(:price, :group => "DATE_TRUNC('day', date)") 问题是,我的源数据中每小时的价格实际上反映了前一小时的价格。

在my Rails应用程序的PostgreSQL DB中,记录了过去10年的每小时价格:

其中10(24 x 365):“2012年12月31日01:00:00”,“11.99”

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

   HourlyPrice.average(:price, :group => "DATE_TRUNC('day', date)")
问题是,我的源数据中每小时的价格实际上反映了前一小时的价格。因此,在我的data source.CSV中,一天从01:00:00开始,到24:00:00结束

这与PostgreSQL希望在其DateTime列中保存记录的方式相冲突。导入CSV数据后,PostgreSQL会将包含时间24:00:00到次日00:00:00的我的记录进行转换

这使我上面的平均查询失去了准确性。为了修复查询,我仍然希望按天分组,但偏移1小时。因此,平均范围从01:00:00开始,以第二天的00:00:00值结束


是否可以调整上述查询以反映这一点?

在对其应用
date\TRUNC
函数之前,您可以从
date
中减去一小时,如下所示:

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

您不必在问题的标题中添加PostgreSQL、Rails、ActiveRecord等。人们可以从标签上看到问题是关于什么的。甚至,也没有必要加上你的名字和“谢谢”。这些都是从你的其他问题中删去的,所以我想我应该让你知道这一点。除此之外,还有一个好问题。为什么不在导入CSV数据时修复CSV数据,使其与数据库的期望值相匹配?你不想数据库对你撒谎,也不想对数据库撒谎。谢谢。您的意见将永远受到赞赏。我考虑过这个。然而,我的数据来自一个声誉良好的来源(公共机构),我不想破坏他们的格式。如果我将所有日期移动一行以适应db行为,并且有人将价格记录的日期与来源交叉检查以验证其准确性,那么它将关闭,从而引发混乱和不信任。也许我应该将日期列从DateTime转换为string,然后重试这个查询?你说得对,安德烈。非常感谢。该查询现在通过数千条记录,并完美地创建了平均值:)干得好。再次感谢。