只要满足条件,每月统计用户
Posted
技术标签:
【中文标题】只要满足条件,每月统计用户【英文标题】:Count users every month as long as condition is met 【发布时间】:2018-05-24 20:21:06 【问题描述】:我正在努力编写一个查询,而不是根据两个日期字段交互的条件每月计算用户数。 首先,我有一个唯一标识用户的字段,第二个字段记录用户订阅的日期,第三个字段记录取消订阅的日期。
user, subscribed, unsubscribed
1234, 2017-01-01, null
2345, 2017-01-01, 2017-12-01
3456, 2017-03-01, 2017-05-20
我希望看到的表格是:
date, user_count
2017-01-01, 2
2017-02-01, 2
2017-03-01, 3
2017-04-01, 3
2017-05-01, 3
2017-06-01, 2
etc...
我知道我必须包含订阅必须大于未订阅的 where 条件。在哪里订阅 > 取消订阅。 Null 仅表明存在用户尚未取消订阅的空值。我只是不确定如何在一年中的每个月每次满足条件时计算用户数。我需要将我的表加入日期-月份系列吗?
【问题讨论】:
【参考方案1】:是的,你需要一个月度系列 - 看到这个post
然后,您可以将您的表加入到返回不同月份的子查询中,条件如下:
WHERE first_date_of_month BETWEEN date_trunc('month',subscribed) AND date_trunc('month',coalesce(unsubscribed,getdate())
coalesce
函数会将第一个参数中的 NULL 值替换为第二个参数(当前日期)
【讨论】:
是的,您需要加入,还需要使用“分组依据”来显示月份的计数 @AlexYes - 谢谢,您的解决方案似乎适用于较小的表格样本。我想知道我是否可以轻松扩展它,因为我有大约 7000 万用户,并且我正在与三年的每月系列表进行交叉连接,这在查询进行最终计数之前创建了接近 2.5B 行(70M 行 X 36行)。 @Javier 您采用了哪种方法?如果您遇到性能问题,您可能会将每月的系列分成更小的部分,比如说一年,将第一年的结果具体化到一个表格中,然后附加第二年和第三年。以上是关于只要满足条件,每月统计用户的主要内容,如果未能解决你的问题,请参考以下文章