我試圖找出每月執行操作A或操作B的#個用戶。加入generate_series並計數
表:用戶 - 編號 - 「creationDate」
表:action_A - USER_ID(= user.id) - 「creationDate」
表:action_B - USER_ID(=用戶。 「creationDate」
我想要做的一般想法是,我會找到在第X個月執行操作A的用戶列表,以及在第X個月執行操作B的用戶列表,然後計算如何馬根據每月生成的日期系列,每個月都會有ny ID。
我嘗試了以下操作,但是,查詢在運行時超時並且我不確定是否有任何方法來優化它(或者它甚至是正確的)。
SELECT monthseries."Month", count(*)
FROM
(SELECT to_char(DAY::date, 'YYYY-MM') AS "Month"
FROM generate_series('2014-01-01'::date, CURRENT_DATE, '1 month') DAY) monthseries
LEFT JOIN
(SELECT to_char("creationDate", 'YYYY-MM') AS "Month",
id
FROM action_A) did_action_A ON monthseries."Month" = did_action_A."Month"
LEFT JOIN
(SELECT to_char("creationDate", 'YYYY-MM') AS "Month",
id
FROM action_B) did_action_B ON monthseries."Month" = did_action_B."Month"
GROUP BY monthseries."Month"
任何意見/幫助將非常有幫助!
IMO它的清潔使用'date_trunc( '月', 「creationDate」)'代替'to_char'。否則看起來理智。查詢的'EXPLAIN'輸出是什麼? – 2014-09-26 00:45:11
你想在每個月或總ID中統計不同的ID? – 2014-09-26 09:09:28
謝謝! Clodoaldo回答了我的問題,是的,我試圖計數明確的ID :)我將確保將來使用date_trunc! :) – christinang89 2014-09-26 20:15:26