gpt4 book ai didi

postgresql - 加入 generate_series 并计数

转载 作者:行者123 更新时间:2023-11-29 13:30:03 24 4
gpt4 key购买 nike

我试图找到每月执行操作 A 或操作 B 的 # 个用户。

表:用户- ID- “创建日期”

表:action_A- user_id (= user.id)- “创建日期”

表:action_B- user_id (= user.id)- “创建日期”

我尝试做的事情的一般想法是,我会找到在 X 月执行操作 A 的用户列表和在 X 月执行操作 B 的用户列表,然后计算有多少个 ID每个月基于 generate_series 的月度日期。

我尝试了以下方法,但是,查询在运行时超时,我不确定是否有任何方法可以优化它(或者它是否正确)。

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"

任何评论/帮助都会非常有帮助!

最佳答案

如果你想统计不同的用户:

select to_char(month, 'YYYY-MM') as "Month", count(*)
from
generate_series(
'2014-01-01'::date, current_date, '1 month'
) monthseries (month)
left join (
(
select distinct date_trunc('month', "creationDate") as month, id
from action_a
) a
full outer join (
select distinct date_trunc('month', "creationDate") as month, id
from action_b
) b using (month, id)
) s using (month)
group by 1
order by 1

关于postgresql - 加入 generate_series 并计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com