0

と呼ばれる特定の日付の配列がありますarray_of_dates

my_tableそして、 「date」列と「count」列を持つテーブルがあります。

'date'列と一致してハッシュを返すアクティブレコードクエリを作成する方法はありmy_tableますarray_of_datesか?すべてのキーはからの日付array_of_datesであり、すべてのはからの「カウント」my_tableです。に存在する日付がの列'date'に存在しない場合、としてゼロを返します。array_of_datesmy_table

前もって感謝します。

4

2 に答える 2

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

于 2012-07-09T17:31:18.350 に答える
1

これを試して:

Model.select("date, count").
  where(:date => array_of_dates).
    reduce(Hash.new(0)){ |h, r| h[r.date] = r.count;h}
于 2012-07-09T18:07:01.450 に答える