【发布时间】:2019-08-29 14:52:09
【问题描述】:
我需要根据组找到系统中活跃用户的运行总数 如果用户当前被暂停,则不应在当前计数中考虑他,但应在他处于活动状态时考虑 对于前 一个用户在 2019 年 4 月被暂停,所以他应该被视为活跃用户,直到 3 月份的所有计数结束
users 表包含状态 ('Active'/'Suspended') 和 updatedon 列 我已经编写了代码,但它并没有给我想要的结果,因为它只考虑了当前的活跃用户
SELECT DISTINCT Concat(year(b1.created_at),'-',monthname(b1.created_at)) Date,c1.name as 'GroupName',
(
select
count(distinct(b.user_id)) from
users u2 join teams_users b on u2.id = b.user_id join teams c on b.team_id = c.id
where
year(b.created_at)*100 + month(b.created_at) <= year(b1.created_at)*100+month(b1.created_at)
and
u2.organization_id =1690
and u2.status = 'Active'
and c.organization_id = 1690
and c.id =c1.id
) total_users
from users u1 join teams_users b1 on u1.id = b1.user_id
join teams c1 on b1.team_id = c1.id
where
u1.organization_id =1690 and u1.status = 'Active'
用户
UserId|CreatedOn|Status|Updatedon
团队
Id|Name
Team_users
Team_id|User_id|CreatedOn
【问题讨论】:
-
它只考虑当前活跃用户,因为这两个查询都明确声明
where ... and u1/u2.status = 'Active'所以当然你只会找到活跃用户。您不能在 where 子句中使用它并期望找到有关当前非活动用户的记录。 -
是的,但如果我删除状态并且用户已被暂停,我如何将其从进一步添加中删除
-
在不知道数据结构的情况下很难回答这个问题,但是您可以使用 case 语句在活动时将“活动”计数加 1,否则加 0。同样,在不活动计数时加 1未激活,否则加 0,查找文档以获取案例语句,它们非常有帮助。
-
您能否至少发布您正在使用的数据结构和您编写的真实查询?发布的那个是错误的,表别名都搞砸了(
b1,c1不存在),因此不可能弄清楚你在做什么,例如带有created_at条件。 -
@MarcinJ 已更新
标签: mysql sql cumulative-sum