Active Record联接表基于最大日期,然后按其他字段分组并汇总一列

时间:2018-08-20 21:36:50

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

我正在使用记录活跃的红宝石。我正在尝试联接一些表,以便可以基于父类进行分组,但是我想总结每个用户在子类上的所有列,同时仅查看该用户的最大日期条目。很难描述,这是成功获得我想要的查询的查询(除了将结果限制为仅添加与该位置营地中客户的客户互动的最大日期匹配的记录)

@routeMeals = ClientInteraction.joins('INNER JOIN location_camps as lc on lc.id = location_camp_id')
                        .joins('INNER JOIN clients as c on c.id = client_id')
                        .joins('INNER JOIN locations as l on l.id = lc.location_id')
                        .joins('INNER JOIN routes as r on r.id = l.route_id')
                        .select('r.name, sum(c.number_meals) as totalNumberMeals')
                        .where('still_lives_here = ?', true)
                        .group('r.name')

剩下的是,我只想到达“ created_at = [此client_id和location_camp_id的最大日期]”的位置。

我试图在这里使用子查询,但是它一直在中断

1 个答案:

答案 0 :(得分:0)

我最终开始使用它,在.where里面的内部SELECT起作用了

ClientInteraction.joins('INNER JOIN location_camps as lc on lc.id = location_camp_id')
                            .joins('INNER JOIN clients as c on c.id = client_id')
                            .joins('INNER JOIN locations as l on l.id = lc.location_id')
                            .joins('INNER JOIN routes as r on r.id = l.route_id')
                            .select('r.name, sum(c.number_meals) as totalNumberMeals')
                            .where('client_interactions.still_lives_here = ? AND 
                                client_interactions.created_at = 
                                (SELECT MAX(created_at) from client_interactions 
                                where client_id = c.id and location_camp_id = lc.id) AND 
                                r.is_active = ? AND l.is_active = ? AND lc.is_active = ?', true, true, true, true)
                            .group('r.name')