【问题标题】:Get most recent distinct records获取最新的不同记录
【发布时间】:2014-11-22 19:42:46
【问题描述】:

每个度假村都有很多雪情报告。 我想获取每个度假村的最新雪情报告,其中表 snow_reports 中的 snow_summit 字段应 > 0 。

所以我尝试在resort_id 上选择不同的,这是snow_reports 中的fkey,并按updated_at 排序,但这不可能,因为选择中没有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 为 nil

#<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));

【问题讨论】:

  • 你的表里有没有这种规格的记录

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


【解决方案1】:

试试这个:

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

它可能会起作用。

【讨论】:

  • 像这样 snowreport_id 为 nil
  • @dc10 你能把输出发给我吗
  • SnowReport.includes(:resort).select(:resort_id).where("snow_summit > ?", 0).order("updated_at DESC") SnowReport 加载 (3.5ms) SELECT "snow_reports" ."resort_id" FROM "snow_reports" WHERE (snow_summit > 0) ORDER BY updated_at DESC Resort Load (1.1ms) SELECT "resorts".* FROM "resorts" WHERE "resorts"."id" IN (1727,.... ..) => #<:relation id>,#,#,.. .]> 2.1.1:150 >
  • @Gwori 等一下,我只是仔细检查了一下,我注意到没有不同或组条件,所以SnowReport.includes(:resort).select(:id, :resort_id).where("snow_summit &gt; ?", 0).order("updated_at DESC") 导致SELECT "snow_reports"."id", "snow_reports"."resort_id" FROM "snow_reports" WHERE (snow_summit &gt; 0) ORDER BY updated_at DESC 返回所有ID
  • @dc10 我忽略了它所以忘记添加组条件请检查我的答案我编辑了它。
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2012-04-10
  • 1970-01-01
  • 2011-07-30
相关资源
最近更新 更多