与表

2012-07-09 19 views
0

的列匹配阵列I具有特定日期称为array_of_dates的阵列。与表

而且我有一个与列“日期”和“计数”叫my_table表。

有没有办法让我写活动记录查询来匹配my_table中的'date'列和array_of_dates并返回哈希值?所有array_of_dates是日期,所有的是从my_table“计数”;返回零作为如果存在于array_of_dates日期并不在my_table列“日期”存在。

在此先感谢。

回答

1

试试这个:

Model.select("date, count"). 
    where(:date => array_of_dates). 
    reduce(Hash.new(0)){ |h, r| h[r.date] = r.count;h} 
1

的SQL看起来是这样的:

SELECT date_col AS key, count(t.date_col) AS value 
FROM (
    SELECT unnest('{2012-07-08, 2012-07-09, 2012-07-10}'::date[]) AS date_col 
    ) x 
LEFT JOIN tbl t USING (date_col) 
GROUP BY date_col; 

的关键因素是与unnest()子查询和LEFT JOIN,而不是一个普通的加盟。

values将是0如果未找到匹配的日期,因为count(t.date_col)不计算NULL值。