【发布时间】:2018-03-27 09:22:38
【问题描述】:
我在连接中使用了以下两个表
TABLE1: rat_proj_duration_map
列: UID、Hour_val、month_val
TABLE2: 个用户
列: UID、状态、left_on
此处状态将包含文本('Act','InAct')
现在,我正在尝试获取按 month_val 字段分组的 UID 计数,如下所示
select count(r.uid) as cnt, r.month_val
from rat_proj_duration_map r
inner join users u on r.uid = u.uid
where r.year_val = 2018
group by r.month_val
order by month_val
上面的查询给出了按月计算的记录数。
但是,我试图忽略左侧日期(用户表中的 left_on)中的“未激活”用户(用户表中的状态字段)。
因此,如果用户留在“2018-03-27”,那么该用户记录应计算到 3 月,而不是在那之后。
要添加到我的查询的条件是什么
示例输出: 如果有 100 个用户记录和一个用户 left_on '2018-03-27' 状态为 'Inactivate' 那么我的结果应该如下所示
Count Month_val
100 1
100 2
100 3
99 4
99 5
99 6
99 7
99 8
99 9
99 10
99 11
99 12
【问题讨论】:
-
您的表
rat_proj_duration_map是某种日历表吗?我们无法运行您提供的查询,也无法访问您的对象。我所能告诉你的只是在你的WHERE中添加一个进一步的子句。 也许AND DATEPART(MONTH,u.dateleft) <= r.month_val(不知道哪个字段中有日期)?不过,该子句不会是 SARGable。 -
rat_proj_duration_map包含整数形式的month_val -
是的,我知道,否则您将无法使用
r.month_val。恐怕你的评论并没有告诉我关于这张桌子的任何其他信息。 -
Left_on 将在用户“未激活”时由日期时间戳填充,因此我必须忽略退出日期月份值中的用户数据
标签: sql sql-server date group-by