¿Puede el registro activo de Rails manejar consultas agregadas de SQL?

Acabo de comenzar a aprender el registro activo y me pregunto cómo recuperar mejor los datos de varias tablas en las que está involucrada una consulta agregada de SQL.

En el siguiente ejemplo (de una aplicación médica) estoy buscando los eventos más recientes de varios tipos para cada paciente (por ejemplo, la última visita, la última prueba de laboratorio, etc.). Como puede ver en la consulta de SQL a continuación, estoy buscando el valor máximo (fecha) de una consulta agrupada. Recurrí a find_by_sql para hacer esto, sin embargo, me gustaría ver cómo hacerlo sin usar find_by_sql.

IOW: ¿cómo obtendría los datos requeridos aquí utilizando un enfoque puro de ActiveRecord? A continuación se muestran las definiciones de tabla y clase que estoy probando con:

Busque por Sql para recuperar las entradas más recientes para cada tipo; anote el 'max (event_date)' aquí

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"

Aquí está el resultado de la consulta SQL de muestra:

lname, patient_id, event_type, latest
'Hunt', 3, 'Labtest', '2003-05-01 00:00:00'
'Hunt', 3, 'Visit', '2003-03-01 00:00:00'
'Seifer', 2, 'Labtest', '2002-05-01 00:00:00'
'Seifer', 2, 'Visit', '2002-03-01 00:00:00'

Table Relationships are:
Tables ---> Patients --> Events
                               --> visits
                               --> labtests
                               --> ... other
patients
      t.string :lname
      t.date :dob

events
      t.column :patient_id, :integer
      t.column :event_date, :datetime
      t.column :event_type, :string

visits 
      t.column :event_id, :integer
      t.column :visittype, :string

labtests
      t.column :event_id, :integer
      t.column :testtype, :string
      t.column :testvalue, :string

Las clases

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta