2012-10-10 91 views
0

我可以使用find_by_sql来完成这一任务,但如果可能的话,我想尽量使用Rails方式。将SQL查询转换为Rails查询

我的SQL查询看起来是这样的:

SELECT regions.id, max(updated_at) FROM demographics 
JOIN regions ON (regions.id = demographics.region_id) 
JOIN region_stats ON (region_stats.region_id = regions.id) 
WHERE region_stats.income_level = 1  
GROUP BY demographics.region_id; 

有没有干净地将它转换为Rails的?

+0

目前尚不清楚现场'updated_at'属于哪个表,你能澄清? – PinnyM

回答

1

未经测试:

Demographic.joins(:region => [:region_stats]).select('demographics.region_id, max(demographics.updated_at) as `max_date`').where(:region_stats => {:income_level => 1}).group('demographics.region_id') 
+0

谢谢,这个让我走上了正轨。 – Bholzer

1
Demographic.find(:all, 
    :conditions=>[ 
    "region_stats.income_level = ?", 
    1 
    ], 
    :joins=>"as demographics JOIN regions ON (regions.id = demographics.region_id) JOIN region_stats ON (region_stats.region_id = regions.id)", 
    :group=>"demographics.region_id", 
    :select=>"regions.id, demographics.max(updated_at)" 
)