我试图找出每月执行操作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