在Ruby On Rails / PostgreSQL中按日期对时间戳字段进行分组



我正在尝试转换以下代码以使用PostgreSQL。

在做了一些挖掘之后,我意识到PostgreSQL对GROUP BY比MySQL更严格(以一种好的方式),但对于我的生活,我无法弄清楚如何重写这个语句来满足Postgres。

def show
  show! do
    @recent_tasks = resource.jobs.group(:task).order(:created_at).limit(5)
  end
end
PG::Error: ERROR:  column "jobs.created_at" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...ND "jobs"."project_id" = 1 GROUP BY task ORDER BY created_at...
                                                         ^
: SELECT  COUNT(*) AS count_all, task AS task FROM "jobs"  WHERE "jobs"."deleted_at" IS NULL AND "jobs"."project_id" = 1 GROUP BY task ORDER BY created_at DESC, created_at LIMIT 5

不能按顺序使用不在分组依据中的列。
你可以做类似的事情

@recent_tasks = resource.jobs.group(:task, :created_at).order(:created_at).limit(5)

但它会改变结果

你也可以

@recent_tasks = resource.jobs.group(:task).order(:task).limit(5)

@recent_tasks = resource.jobs.group(:task).order('count(*) desc').limit(5)

最新更新