1
先月末に特定のユーザーによって作成されたすべてのレコード(ビジネス)のレポートを作成する必要があります。私は次のクエリを生成し、毎月行を提供すると期待しています。しかし、このユーザーはこれらの月にレコード(企業)を作成していないので、空の結果[]
が得られます。RIGHT OUTER JOINはWHEREで空の結果を返します
RIGHT OUTER JOINを使用してgenerate_series
列を選択しているため、毎月行を受け取る予定ですが、発生しません。
start = 3.months.ago
stop = Time.now
new_businesses = Business.select(
"generate_series, count(id) as new").
joins("RIGHT OUTER JOIN (SELECT
generate_series(#{start.month}, #{stop.month})) series
ON generate_series = date_part('month', created_at)
").
where(created_at: start.beginning_of_month .. stop.end_of_month).
where(author_id: creator.id).
group("generate_series").
order('generate_series ASC')
空の結果ではなく、月ごとに行を取得するようにクエリを変更するにはどうすればよいですか?私はPosgreSQLを使用しています。
UPDATE
このコードは動作します:
new_businesses = Business.select(
"generate_series as month, count(id) as new").
joins("RIGHT OUTER JOIN (SELECT
generate_series(#{start.month}, #{stop.month})) series
ON (generate_series = date_part('month', created_at)
AND author_id = #{creator.id}
AND created_at BETWEEN '#{start.beginning_of_month.to_formatted_s(:db)}' AND
'#{stop.end_of_month.to_formatted_s(:db)}'
)
").
group("generate_series").
order('generate_series ASC')
あなたは 'LEFT OUTER JOIN'かを'使用してみましたFULL OUTER JOIN'の代わりに? – jmelesky
@jmeleskyはい、同じ結果 – leemour