2014-11-21 100 views
0

每個度假村都有很多下雪報告。 我想獲取每個度假村的最新的雪情報告,其中表snow_reports中的字段snow_summit應該> 0。獲取最新的獨特記錄

所以我試着選擇不同的resort_id,這是snow_reports中的fkey和updated_at的順序,但這是不可能的,因爲updated_at不會出現在select中。

那麼,如何只獲取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

你有這樣的規格記錄在表 – Gowri 2014-11-21 07:01:31

回答

0

試試這個:

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

它可能工作。

+0

這樣的snowreport_id是零 – dc10 2014-11-21 09:07:30

+0

@ DC10你能送我到這裏輸出 – Gowri 2014-11-21 09:12:42

+0

SnowReport.includes(:度假勝地)。選擇(:resort_id)。凡(「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 「度假村」*從「度假村」在哪裏「度假村」。「ID」IN(1727,......) =>#, #,#,...]> 2.1.1:150> – dc10 2014-11-21 09:20:25