刚开始学习活动记录,想知道如何最好地从涉及 SQL 聚合查询的多个表中检索数据。
在以下示例中(来自医疗应用程序),我正在寻找每位患者的各种类型的最新事件(例如,上次访问、上次实验室测试等)。正如您从下面的 sql 查询中看到的那样,我正在从分组查询中查找 max(date) 值。我求助于 find_by_sql 来执行此操作 - 但是我想看看如何在不使用 find_by_sql 的情况下执行此操作。
IOW - 您将如何使用纯 ActiveRecord 方法在此处获取所需的数据。下面是我正在测试的表和类定义:
按 Sql 查找以检索每种类型的最新条目 - 请注意此处的“max(event_date)”
strsql = "select p.lname, e.patient_id, e.event_type, max(e.event_date) as event_date
from events e
inner join patients p on e.patient_id = p.id
group by p.lname, e.patient_id, e.event_type"
这是示例 sql 查询结果:
lname, Patient_id, event_type, 最新 '狩猎',3,'Labtest','2003-05-01 00:00:00' '狩猎',3,'访问','2003-03-01 00:00:00' 'Seifer',2,'Labtest','2002-05-01 00:00:00' 'Seifer', 2, '访问', '2002-03-01 00:00:00' 表关系是: 表格 ---> 患者 --> 事件 --> 访问 --> 实验室测试 --> ... 其他 耐心 t.string :lname t.date :dob 事件 t.column:患者ID,:整数 t.column :event_date, :datetime t.column :event_type, :string 访问 t.column :event_id, :integer t.column:访问类型,:字符串 实验室测试 t.column :event_id, :integer t.column :testtype, :string t.column:测试值,:字符串
课程
class Patient < ActiveRecord::Base
has_many :events
has_many :visits, :through =>:events
has_many :labtests, :through => :events
end
class Event < ActiveRecord::Base
has_many :visits
has_many :labtests
belongs_to :patient
end
class Visit < ActiveRecord::Base
belongs_to :event
end
class Labtest < ActiveRecord::Base
belongs_to :event
end