我有两种模式:
# Table name: work_schedules
#
# id :integer not null, primary key
# start_time :time not null
# end_time :time not null
# day_of_week :string not null
# updated_at :datetime not null
# person_id :integer
# Table name: people
#
# id :integer not null, primary key
# pesel :string not null
# first_name :string not null
# last_name :string not null
我希望在查询中找到最忙碌的员工。 首先,我应该计算小时数(end_time - start_time)并计算day_of_week(唯一属性范围:person_id)。我不知道如何正确创建查询。 我尝试了什么:
@most_busy = Person.joins(:work_schedules).where(%q{end_time - start_time}).first
答案 0 :(得分:1)
对于一周中的所有日子(即,在一周的所有日子里总结):
WorkSchedule.group(:person_id).sum('extract(epoch from work_schedules.end_time) -extract(epoch from work_schedules.start_time)').sort_by { |_,v| -v}.first.first
这将为您提供在所有WorkSchedules上工作最多的人员的ID。我只用PostgreSQL测试过它。
此查询中发生了什么: