获取最新的不同记录

时间:2014-11-21 01:12:01

标签: ruby-on-rails postgresql rails-activerecord

每个度假村都有很多雪情报道。 我想获得每个度假胜地的最新雪情报告,其中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));

1 个答案:

答案 0 :(得分:0)

试试这个:

SnowReport.includes(:resort).select(:id, :resort_id).where("snow_summit > ?", 0).order("updated_at DESC").group(:resort_id)

它可能有用。