Aktywny rekord Can Rails obsługuje zapytania agregujące SQL?

Właśnie zacząłem uczyć się aktywnego rekordu i zastanawiam się, jak najlepiej pobierać dane z wielu tabel, w które zaangażowane jest zapytanie agregujące SQL.

W poniższym przykładzie (z aplikacji medycznej) szukam najnowszych wydarzeń różnych typów dla każdego pacjenta (np. Ostatnia wizyta, ostatni test laboratoryjny itp.). Jak widać z poniższego zapytania sql, szukam wartości max (data) z zgrupowanego zapytania. W tym celu skorzystałem z funkcji find_by_sql - jednak chciałbym zobaczyć, jak to zrobić bez używania find_by_sql.

IOW - w jaki sposób można uzyskać wymagane dane przy użyciu czystego podejścia ActiveRecord. Poniżej znajdują się defekty tabeli i klasy, które testuję z:

Znajdź przez Sql, aby pobrać najnowsze wpisy dla każdego typu - zwróć uwagę na „max (event_date)” tutaj

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"

Oto przykładowy wynik zapytania sql:

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

Klasy

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

questionAnswers(3)

yourAnswerToTheQuestion