一个查询不重复记录的SQL语句
求助一个查询不重复记录的SQL语句
请教各位,有一张短消息表如下:

其中,SendID为短消息发送用户ID,ReceiveID为短消息接收用户ID,SmsContent为短消息内容,CreateDatetime为发送时间。
现在要实现查询出ID为uA的用户与其他用户之间的短消息来往,但与其他用户之间的短消息只查询一条最新的出来,不管uA是发送方还是接收方,以CreateDatetime降序排列,请问这要求使用一条SQL语句能实现吗?该怎么写?
查询出的结果如下图,需要读出来字段为绿色部分:

最后再问一下,如果同时查询出uA与其他各用户之间互相发送短消息的条数能实现吗?
非常感谢!!!
------解决思路----------------------
请教各位,有一张短消息表如下:
其中,SendID为短消息发送用户ID,ReceiveID为短消息接收用户ID,SmsContent为短消息内容,CreateDatetime为发送时间。
现在要实现查询出ID为uA的用户与其他用户之间的短消息来往,但与其他用户之间的短消息只查询一条最新的出来,不管uA是发送方还是接收方,以CreateDatetime降序排列,请问这要求使用一条SQL语句能实现吗?该怎么写?
查询出的结果如下图,需要读出来字段为绿色部分:
最后再问一下,如果同时查询出uA与其他各用户之间互相发送短消息的条数能实现吗?
非常感谢!!!
------解决思路----------------------
SELECT ID,SendID,ReceiveID,CreateDatetime,SmsContent
FROM TB T1
WHERE(T1.SendID='uA'OR T1.ReceiveID='uA')AND NOT EXISTS(SELECT 1 FROM TB T2
WHERE((T1.SendID=T2.SendID AND T1.ReceiveID=T2.ReceiveID)
OR(T1.SendID=T2.ReceiveID AND T1.ReceiveID=T2.SendID))
AND T1.CreateDatetime<T2.CreateDatetime)
--2005+方式
;WITH CTE AS(
SELECT ID,SendID,ReceiveID,CreateDatetime,SmsContent
,ROW_NUMBER()OVER(PARTITION BY CASE WHEN SendID='uA'THEN ReceiveID ELSE SendID END
ORDER BY CreateDatetime DESC)RN
FROM TB
WHERE SendID='uA'OR ReceiveID='uA'
)
SELECT ID,SendID,ReceiveID,CreateDatetime,SmsContent
FROM CTE WHERE RN=1