我有一个用例,我需要根据它们的created_at
或它们的start_on
值查询Appointment
记录。有两种类型的约会:“估计”和“GLA(去看看)”,由type
字段值在0和1MySQL/Rails - 基于每个记录的属性动态查询表字段
表示如果约会型估计,查询的需求要使用start_on
字段 - 并且如果约会是GLA,则查询需要使用created_at
字段,因为GLA的未调度并且没有start_on值。
现在,我使用查询Rails的范围下渗谁已经从与某个日期,像这样有他们的最后一次约会属性(“从”下面所示)中的数据:
scope :last_appointment_from, ->(date, type) {
query = joins(:appointments)
query = query.where('appointments.start_on = (
SELECT MAX(appointments.start_on)
FROM appointments
WHERE appointments.property_id = properties.id)')
query = query.where('appointments.start_on >= ?', date)
query
}
但是,这只查询start_on
值。
我试过寻找最伟大的(MAX(start_on),MAX(created_at)) - 但我不知道如何知道哪个字段知道在where('events.start_on >= ?', date)
部分使用。
输入了这一点后,我想另一个可能的解决方法的 - 只是创建系统会根据什么类型的约会是的,称为query_field
或某事(和运行上的活动记录的回调与相应的日期更新其他数据库字段一个为所有现有记录设置该值的脚本) - 那样我就可以在该字段上查询?
任何想法/帮助非常感谢!
您是否会将该类型传递给作用域,因为您在问题中包含该类型,或者是否希望将这两种类型的连贯列表放在一起? –
我想要一个包含较大者的列表。因此,如果其最大预约日期(不论哪种类型)的开始日期大于估算时选择的日期或创建日期大于GLA案例中选择的日期,那么它将返回属性。 – gregblass