尝试根据活动阈值找出每月用户流失的SQL查询

时间:2013-06-24 19:00:06

标签: mysql sql query-optimization infobright

我有一个表(我们在InfoBright柱状存储上,我使用MySQL Workbench作为我的界面),它基本上跟踪用户和带有日期戳的活动计数。这是每日汇总表。架构基本上是

userid (int)
activity_count (int)
date (date)

我想要找到的是我的用户每月都在搅拌的数量,其中活跃用户的基础定义为每月活动数量总计为> 10

要查找我当前正在使用的给定月份中有多少用户

select year, month, count(distinct user) as users
from
(
select YEAR(date) as year, MONTH(date) as month, userid as user, sum(activity_count) as activity
from table
group by YEAR(date), MONTH(date), userid
having activity > 10
order by YEAR(date), MONTH(date)
) t1
group by year, month

不是SQL专家,我相信这可以改进,并会对此表示赞赏。

我的更大目标是逐月计算出这个数量的用户中有多少是上个月的新用户或重复用户。我不知道如何在没有丑陋的嵌套或加入的情况下做到这一点,我觉得它应该相当简单。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为进一步嵌套是实现这一目标的最佳方式。我会做一些事情,比如选择最小连接年份和用户的用户。月份作为上层的中间层(即外部和内部查询之间),以便您可以建立用户变为活动状态的第一个月。然后,您可以向外部查询添加where子句以进行过滤,以便仅显示您需要的月份。如果您需要语法方面的帮助,请告诉我。