每个度假村都有很多雪情报道。 我想获得每个度假胜地的最新雪情报告,其中snow_reports表中的字段snow_summit应该是> 0。
所以我尝试在resort_id上选择distinct,这是snow_reports中的fkey,并按updated_at排序,但这不可能,因为在select中没有出现updated_at。
那么如何才能获得rails4中关联模式的最新记录(在postgres上)?
SnowReport belongs_to Resort
Resort has_many snow_reports
Table snow_reports has id,resort_id,updated_at,snow_summit
理想情况下,出于性能原因,结果会合并。
我的方法失败
SnowReport.includes(:resort).select(:resort_id).group(:resort_id).having('max(snow_summit)> 0').order('max(snow_reports.updated_at) DESC')
因为SnowReport.id是零
#<ActiveRecord::Relation [#<SnowReport id: nil, resort_id: 1735>, ...
编辑:
我在普通的sql中找到了一个解决方案。 如何将其转换为rails?
select * from resorts where id in (select distinct(resort_id) from snow_reports where snow_summit > 0 and created_at > (now()- interval '3 days')
and created_at in (select max(created_at) from snow_reports group by resort_id));
答案 0 :(得分:0)
试试这个:
SnowReport.includes(:resort).select(:id, :resort_id).where("snow_summit > ?", 0).order("updated_at DESC").group(:resort_id)
它可能有用。