【发布时间】:2020-02-08 09:41:35
【问题描述】:
我需要做一个复杂的外连接。如果没有与之连接的service_note,我想在service interval 的结果中显示一行。从查询中可以看到service_interval 属于一个service_job,它通过联合表service_note_jobs 连接到service_notes。目前,如果没有service_note 连接到该service_interval,它将返回一个空关系。
def self.distance_and_time_until_next_service(service_interval_ids)
ServiceInterval
.left_joins(vehicle: { service_notes: :service_note_jobs })
.where(
'service_note_jobs.service_job_id = service_intervals.service_job_id AND '\
'service_intervals.vehicle_id = service_notes.vehicle_id'
)
.where(service_intervals: { id: service_interval_ids })
.group('service_intervals.id')
.select(
'service_intervals.id',
"MAX(GREATEST(service_notes.odometer, service_intervals.created_odometer) - vehicles.odometer + service_intervals.distance_interval) AS distance_left_until_next_service",
"MAX(ROUND(EXTRACT(epoch FROM(GREATEST(service_notes.date, service_intervals.created_at) - NOW())) / 86400 + service_intervals.time_interval)) AS time_left_until_next_service"
)
end
【问题讨论】:
标签: ruby-on-rails ruby postgresql activerecord