Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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
Ruby on rails Ruby Postgresl组语句_Ruby On Rails_Postgresql_Group By - Fatal编程技术网

Ruby on rails Ruby Postgresl组语句

Ruby on rails Ruby Postgresl组语句,ruby-on-rails,postgresql,group-by,Ruby On Rails,Postgresql,Group By,我有以下postgresql语句,它在navicat for postgresql中运行正常 SELECT date_trunc('day', updated_at), count(*) as total_count FROM "persons" WHERE ("persons"."updated_at" BETWEEN '2012-10-17 00:00:00.000000' AND '2012-11-07 12:25:04.082224') GROUP BY date_trunc('

我有以下postgresql语句,它在navicat for postgresql中运行正常

SELECT date_trunc('day', updated_at), count(*) as total_count 
FROM "persons"
WHERE ("persons"."updated_at" BETWEEN '2012-10-17 00:00:00.000000' AND '2012-11-07   12:25:04.082224') 
GROUP BY date_trunc('day',updated_at)
ORDER BY count(updated_at) DESC
我得到了预期的结果,比如

2012-10-31 00:00:00,5
2012-11-06 00:00:00,2
2012-11-05 00:00:00,1
我需要将其转换为ruby,用于RoR项目

我写了以下声明

persons = where(updated_at: start.beginning_of_day..Time.zone.now)
persons = persons.group("date(updated_at)")
persons = persons.select("updated_at, count(*) as total_count")
persons = persons.order("count(updated_at)")
但是,我得到以下错误

PG::Error: ERROR:  column "persons.updated_at" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT updated_at, count(*) as total_count FROM "persons"  WH...
           ^
: SELECT updated_at, count(*) as total_count FROM "persons"  WHERE ("persons"."updated_at"     BETWEEN '2012-10-17 00:00:00.000000' AND '2012-11-07 14:38:54.674684') GROUP BY     date(persons.updated_at) ORDER BY count(updated_at)
你知道我做错了什么吗?

也许你可以试试

persons = where(updated_at: start.beginning_of_day..Time.zone.now)
persons = persons.group("date(updated_at), updated_at")
persons = persons.select("updated_at, count(*) as total_count")
persons = persons.order("count(updated_at)")


您正在选择
updated\u at
,但您正在
date(updated\u at)
分组。您需要在
updated\u at
(这可能没有任何意义)分组,或者更改您的选择,以便选择
date(updated\u at)


换句话说,以Jon Day的第二个例子为例。

我使用了您指定的中间选项,取得了一些成功,但现在我又遇到了另一个错误。ActiveModel::MissingAttributeError:缺少属性:状态。状态是我的Person类的一个属性。我还尝试将查询细化为,passes=where(更新时间:start.start\u of_day..Time.zone.now)passs=passs.group(“日期(更新时间)”)passs=passs.select(“日期(更新时间),count(*)as total\u count”)。但是现在我得到(对象不支持#inspect)很抱歉,应该是persons not passeshmm也许您可以发布persone模型的代码。因为我认为这与模型代码有关
persons = where(updated_at: start.beginning_of_day..Time.zone.now)
persons = persons.group("date(updated_at)")
persons = persons.select("date(updated_at), count(*) as total_count")
persons = persons.order("count(updated_at)")
persons = persons.find(:all, 
                       :select => "updated_at, count(*) as total_count",
                       :group => "updated_at",
                       :order => "count(updated_at)")