Sql server 2008 r2 使用多个条件计算组数和组大小

Sql server 2008 r2 使用多个条件计算组数和组大小,sql-server-2008-r2,partition,Sql Server 2008 R2,Partition,我的数据如下所示: 我需要根据begtim和endtime计算最后两列(noofgrp和grpsize)组数(Clientid计数)和组大小(每组中的客户端数)。所以我在第一个临时表中尝试了以下方法 GrpSize= count(clientid) over (partition by begtime,endtime) else 0 end 在第二张临时表中,我有 select ,GrpSize=sum(grpsize) ,NoofGrp=count(distinct grpsize) F

我的数据如下所示:

我需要根据begtim和endtime计算最后两列(
noofgrp
grpsize
)组数(Clientid计数)和组大小(每组中的客户端数)。所以我在第一个临时表中尝试了以下方法

GrpSize= count(clientid) over (partition by begtime,endtime) else 0 end 
在第二张临时表中,我有

select
,GrpSize=sum(grpsize)
,NoofGrp=count(distinct grpsize)
From Temp1

问题是针对5/26的日期,
begtime
endtime
不一致。在
Grp1
(第1组)中,除11点开始,1200点结束(第8行)的客户外,所有客户都在1030点开始会话,1200点结束(90分钟会话)。对于该客户机,由于他/她
endtime
与其他客户机相同,我希望该客户机位于第一组(
Grp1
)。第二组的情况正好相反(
Grp2
)。所有
begtime
是12:30,
endtime
是1400,但
clientid=2
(第9行)是
begtime=1230
endtime=1300
的客户。但是,由于这个客户机
begtime
与其他客户机相同,因此我希望该客户机位于第二个组(
grp2
)中。我的分区创建了4个组,而不是两个组。有什么建议吗?

如果这符合您的期望,那么请评分并接受答案
with cte1 as (
select date1,id,ROW_NUMBER() over (order by date1) as rn
from #a
),cte2 as (
select top 1 date1,id,rn,cast('grp1' as varchar(10)) as grp ,i = 1
from cte1
union all
select b.date1,b.id,b.rn,cast('grp' + cast((case when a.id = 10 then i+1 else i end) as varchar(10)) as varchar(10)), (case when a.id = 10 then i+1 else i end)
from cte2 as a
inner join cte1 as b
on b.rn = a.rn + 1
)
select *,(case when id = 10 then 'grp' + cast(COUNT(grp) over (partition by grp) as varchar(10)) else '' end)
 from cte2