如何按日期分组并总结在铁轨上的红宝石中

时间:2016-02-05 10:36:17

标签: ruby-on-rails ruby sqlite activerecord

我试图在谷歌和这里找到这个,但似乎我无法在这里找到一个体面的答案问题 我想要的是我需要得到从星期一到星期日每天显示的总hrs总和please check this image

我的模型就像这样

Error: EACCES, permission denied '/home/<USER>/.pm2'

和我的控制器

class Staff < ActiveRecord::Base
  has_many :task_logs
end

class Client < ActiveRecord::Base
  has_many :task_logs
end

class TaskLog < ActiveRecord::Base
belongs_to :staff
belongs_to :client
end

1 个答案:

答案 0 :(得分:0)

理想情况下,我们会按TaskLog

周的天数名称对数据进行分组
Staff
  .joins(:task_logs)
  .group("GROUP BY to_char(task_logs.created_at, 'dy'), staffs.id")
  .select("SUM(task_logs.total_hrs) AS sum_total_hrs, staffs.id AS staff_id, to_char(task_logs.created_at, 'dy') AS day_string")

上述查询的结果将是:(例如)

 sum_total_hrs | staff_id | day_string
---------------+----------+-----------
      50       |     1    |    fri
      45       |     1    |    sat
      20       |     2    |    sat

从上面的结果中,您可以再次加入Staff和其他表格以获取所需的所有列,例如:

temp_sql = Staff
      .joins(task_logs)
      .group("GROUP BY to_char(task_logs.created_at, 'dy'), staffs.id")
      .select('SUM(task_logs.total_hrs) AS sum_total_hrs, staffs.id AS staff_id, to_char(task_logs.created_at, 'dy') AS day_string').to_sql

Staff.joins(task_logs: :client)
     .joins("JOIN (#{temp_sql}) AS temp ON temp.staff_id = staffs.id")