我在联接中使用了两个表
TABLE1: rat_proj_duration_map
列: UID,Hour_val,month_val
TABLE2:用户
列: UID,status,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
以上查询以月为单位显示记录的计数。
但是,我试图忽略“未激活的”#39;用户(用户表中的状态字段)来自左侧的日期(来自users表的left_on)。
因此,如果用户留在' 2018-03-27',则该用户记录应计入3月份,而不是在此之后。
要添加到我的查询中的条件
示例输出: 如果有100个用户记录和一个用户left_on' 2018-03-27'状态'已停用'那么我的结果应该如下所示
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
答案 0 :(得分:2)
根据每个项目的禁用日期过滤用户。您可以使用其他连接子句(或在本例中为WHERE
)执行此操作。
DECLARE @FilterYear INT = 2018
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 = @FilterYear AND
(
u.left_on IS NULL OR
YEAR(u.left_on) > @FilterYear OR
(YEAR(u.left_on) = @FilterYear AND R.month_val <= MONTH(u.left_on))
)
group by
r.month_val
order by
month_val
请记住,我们正在比较年份和月份(没有天数)。您将不得不考虑在月中停用用户时会发生什么。
答案 1 :(得分:1)
我想你想要这个:
DATEADD(month, month_val - 1, DATEADD(year, year_val - 1900, 0))
表达式2018, 3
会将2018-03-01
转换为<ItemsControl ItemsSource="{Binding ConnectorItemsY}">
<ItemsControl.LayoutTransform>
<RotateTransform Angle="270"/>
</ItemsControl.LayoutTransform>
<ItemsControl.Items>
<Style TargetType="ComboBoxItem">
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="0" />
</Setter.Value>
</Setter>
</Style>
</ItemsControl.Items>
</ItemsControl>
。您不需要计算用户状态为非活动且用户早于年 - 月01的记录。
答案 2 :(得分:1)
您可以尝试此查询(代码中必要的注释):
select [count] - [left_count] from
(
select [left_month_val],
--this will give amount of users left UP TO particular month
SUM([left_count]) over (order by [left_month_val] rows between unbounded preceding and current row) [left_count]
from (
--here you count how many users left in particular months
select DATEPART(month, [left_on]) [left_month_val], COUNT(*) [left_count]
from [users]
group by DATEPART(month, [left_on])
) [a]
) [u] join (
--here you count how many users were there in particular months
select [month_val], count(*) [count]
from rat_proj_duration_map
group by [month_val]
) [r] on [u].[left_month_val] = [r].[month_val]
另外,请记住,查询中没有一个包含年份,因此您应该添加另一个分组变量。不幸的是,我不能自己尝试,因为你没有提供示例数据。
答案 3 :(得分:-1)
你可以试试这个
select count(case when u.status='Act' then r.uid end) 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