Rails アプリで使用するために、手動の SQL クエリを ActiveRecord クエリに書き直しています。
目的 同じテーブルから 2 つのグループのユーザーを収集します。1 つは先週の対象イベント (44 または 48) で、もう 1 つは 1 か月前に同じ対象イベントのユーザー グループです。
これが現在のクエリです。これを ActiveRecord スコープに変換する方法がわかりません:
select top 500 active_users_last_week.email
from (
select distinct(email) from user_event_tracking
where event_id in (44,48)
and sitedb_created_date between getdate()-8 and getdate()-1
and sitedb_name = 'XYZ'
and email not like '%@company.com'
and email not like '%@other_company.com'
) active_users_last_week,
(
select distinct(email) from user_event_tracking
where event_id in (44,48)
and sitedb_created_date between getdate()-60 and getdate()-30
and sitedb_name = 'XYZ'
and email not like '%@company.com'
and email not like '%@other_company.com
) active_users_last_month
where active_users_last_week.email = active_users_last_month.email;
これを ActiveRecord スコープに変える方法について何か提案はありますか? これらはすでにスコープとして設定されています:
scope :active_events, lambda {
where("event_id in (44,48)")
}
scope :for_property, lambda { |property|
where('sitedb_name = ?', property)
}
scope :last_week, lambda {
where("sitedb_created_date between GETDATE()-8 and GETDATE()-1")
}
scope :last_month, lambda {
where("sitedb_created_date between GETDATE()-60 and GETDATE()-30")
}
scope :no_test_users, lambda {
where("email not like '%@company.com' and email not like '%@other_company.com'")
}
スコープはすべて個別に (そして相互に) 機能します。問題は、両方の効率的な方法でメールを取得するEvent.active_events.last_week
方法Event.active_events.last_month
です。