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