アクティブ レコードの学習を始めたばかりで、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、患者 ID、イベント タイプ、最新 「ハント」、3、「ラボテスト」、「2003-05-01 00:00:00」 「ハント」、3、「訪問」、「2003-03-01 00:00:00」 「セイファー」、2、「ラボテスト」、「2002-05-01 00:00:00」 'Seifer', 2, '訪問', '2002-03-01 00:00:00' テーブルの関係は次のとおりです。 テーブル ---> 患者 --> イベント --> 訪問 --> ラボテスト --> ... その他 忍耐 t.string :lname t.date :dob イベント t.column :patient_id, :integer t.column :event_date、:datetime t.column :event_type, :string 訪問 t.column :event_id, :integer t.column :visittype, :string ラボテスト t.column :event_id, :integer t.column :testtype, :string t.column :testvalue, :string
クラス
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