http://bbs.csdn.net/topics/390313485?page=1#post-393183709
问题的前半部分发在这个帖子中,已经得到解决。本以为自己可以搞定剩下的部分,但是。。。
想过之后对自己的SQL能力产生了质疑,因为觉得肯定要用存储过程,借助临时表。所以接着来求助大家有没有更好的办法。
完整的场景就是
Message表中有字段 ID FromID ToID
比如现在有数据是
ID FromID ToID IsNew
1 103 102 true
2 102 103 false
3 103 102 true
4 104 102 true
5 105 102 true
from代表发送方,to代表接收方。
按发送方和接收方捆绑分组,比如参与者是103和102的时候,不管103发给102,还是102发给103都算是这一组的,然后取出每组最近的一条。
上面的已经在那个帖子结果了,后续的是,需要取出两个统计字段,一个是统计一组中共有多少条数据,一个是统计一组中有多少条新数据(用IsNew字段标识的)。
按照如上模拟数据的话,取出来的应该是
ID FromID ToID AllCount NewCount
1 103 102 3 2
4 104 102 1 1
5 105 102 1 1
------解决方案--------------------
自己多思考,多学习,不要老想别人给你答案
------解决方案--------------------
declare @message table(id int,fromid int,toid int,isnew int)
insert into @message
select 1 , 103 , 102,1 union all
select 2 , 102 , 103,0 union all
select 3 , 103 , 102,1 union all
select 4 , 104 , 102,1 union all
select 5 , 105 , 102,1
;
with tb as(
select id,fromid,toid,isnew,
case when fromid<toid then fromid else toid end as newfromid,