我有以下postgresql语句,可以在navicat中用于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)
关于我做错什么的任何想法?
答案 0 :(得分:1)
也许你可以试试
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)")
或
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)")
答案 1 :(得分:1)
您正在选择updated_at
,但您正在date(updated_at)
进行分组。您需要对updated_at
进行分组(这可能没有任何意义)或更改您的选择,以便您选择date(updated_at)
。
换句话说,请采取Jon Day的第二个例子。