Ruby on rails Rails中的ActiveRecord查询

Ruby on rails Rails中的ActiveRecord查询,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,我不知道如何在不使用Ruby进行映射/选择等操作的情况下实现以下规范,并尽可能多地使用SQL 我有很多“员工”的“公司” 公司的一名员工被标记为“联系人”(布尔字段)。映射到接触点的范围 公司也有很多“订单” 挑战在于查询一段时间内的所有联系人员工,并返回在该时间段内第一次下单的公司员工 因此,这是一种组合,即查找在时间为订单创建的最小,按公司id分组,然后返回公司查找联系人员工。(我想) 在尝试使用纯ActiveRecord/SQL解决方案时,我大发雷霆,终于求助于此 员工 .联络点 .加入(

我不知道如何在不使用Ruby进行映射/选择等操作的情况下实现以下规范,并尽可能多地使用SQL

我有很多“员工”的“公司”

公司的一名员工被标记为“联系人”(布尔字段)。映射到接触点的范围

公司也有很多“订单”

挑战在于查询一段时间内的所有联系人员工,并返回在该时间段内第一次下单的公司员工

因此,这是一种组合,即查找在时间为订单创建的最小
,按
公司id
分组,然后返回公司查找联系人员工。(我想)

在尝试使用纯ActiveRecord/SQL解决方案时,我大发雷霆,终于求助于此

员工
.联络点
.加入(:公司)
.在哪里(
公司:{
id:Order.all.group\u by(&:company\u id)
.map{o|o.last.sort{a,b|a.created_at b.created_at}.first}
如果{o{o}(日期从..日期到)。封面(o.created在)}
.map(&:公司id)
}
)
date\u from
date\u to
是从报表中删除的日期参数


我希望有一种方法可以简化这个过程。

请参考链接


从(clients.orders\u count IN(1,3,5))的客户机中选择*

您当前的方法将所有订单都存储到内存中,这将是缓慢而粗糙的。我会这样做:

Employee
  .contact_points
  .joins(:company)
  .where(<<-EOQ, date_from, date_to, date_from)
    EXISTS (SELECT  1 
            FROM    orders o
            WHERE   o.company_id = companies.id
            AND     o.created_at BETWEEN ? AND ?)
    AND NOT EXISTS (SELECT  1
                    FROM    orders o
                    WHERE   o.company_id = companies.id
                    AND     o.created_at < ?)
  EOQ

因此,链接只是参考,代码行是答案?Paul,谢谢你,我使用了第二个示例,它非常有用!我感谢你的帮助。
Employee
  .contact_points
  .joins(<<-EOQ)
    INNER JOIN (SELECT o.company_id, MIN(o.created_at) created_at
                FROM   orders o
                GROUP BY company_id) min_orders
    ON employees.company_id = min_orders.company_id
  EOQ
  .where("min_orders.created_at BETWEEN ? AND ?", date_from, date_to)