【问题标题】:Grouping a timestamp field by date in Ruby On Rails / PostgreSQL在 Ruby On Rails / PostgreSQL 中按日期对时间戳字段进行分组
【发布时间】:2012-11-15 14:44:11
【问题描述】:

我正在尝试将以下代码转换为使用 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord rails-postgresql


    【解决方案1】:

    您不能按顺序使用不在 group by 中的列。
    你可以做类似的事情

    @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)
    

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 2018-07-28
      • 2017-05-12
      • 2011-11-28
      • 1970-01-01
      • 2021-03-23
      • 2016-08-23
      • 2013-02-08
      • 1970-01-01
      相关资源
      最近更新 更多