当前位置: 代码迷 >> Sql Server >> 怎样用SQL失去会话列表,日期为最大值
  详细解决方案

怎样用SQL失去会话列表,日期为最大值

热度:94   发布时间:2016-04-24 10:33:51.0
怎样用SQL得到会话列表,日期为最大值
形如短信的会话列表
数据库如下
表名:Messages
字段:
ID(自动编号)
ToEmpID(接收人ID)
FromEmpID(发送人ID)
SendDate(发送日期)
Detail(内容)

求检索出接收人和发送人都不会重复的会话列表,日期为最大日期,且按日期倒序排序,就像智能手机上的短信会话模式一样。
例如我叫张三

最后结果:

发送人   接收人  最新日期

张三     李四   6月6日
王五     张三   6月3日
刘六     张三   6月2日

(第一行发送人是“张三”,是因为最近是我发出给李四的信息,所以结果后面不能再显示李四发给我的记录)


------解决方案--------------------

WITH Messages (ID,ToEmpID,FromEmpID,SendDate,Detail) AS
(
SELECT 1,'张三','李四','2014/06/05','a' UNION ALL
SELECT 2,'王五','张三','2014/06/03','b' UNION ALL
SELECT 3,'刘六','张三','2014/06/02','b' UNION ALL
SELECT 4,'张三','李四','2014/05/05','a' UNION ALL
SELECT 5,'王五','张三','2014/05/03','b' UNION ALL
SELECT 6,'刘六','张三','2014/05/02','b'
)
SELECT ID,ToEmpID,FromEmpID,SendDate FROM Messages a
WHERE ID in
(
SELECT TOP 1 ID 
FROM Messages
where ToEmpID=a.ToEmpID AND FromEmpID=a.FromEmpID 
ORDER BY SendDate DESC
)

------解决方案--------------------
DECLARE @Message TABLE(ID INT,ToEmpID NVARCHAR(200),FromEmpID NVARCHAR(200),SendDate DATETIME,Detail NVARCHAR(500))

INSERT INTO @Message(ID,ToEmpID,FromEmpID,SendDate,Detail)
SELECT 1,'张三','李四','2014/06/05','ha ha' UNION ALL
SELECT 2,'李四','张三','2014/06/06','he he' UNION ALL
SELECT 3,'张三','李四','2014/06/07','bye bye' UNION ALL
SELECT 4,'张三','王五','2014/05/05','SB' UNION ALL
SELECT 5,'王五','张三','2014/05/07','NB' UNION ALL
SELECT 6,'刘六','张三','2014/05/02','ML' UNION ALL
SELECT 7,'张三','刘六','2014/06/07','DL' 

SELECT  FromEmpID AS 发件人
   ,ToEmpID AS 收件人
   ,SendDate AS 最新日期
FROM @Message a
WHERE NOT EXISTS(SELECT * FROM @Message 
                 WHERE ((a.ToEmpID = ToEmpID AND a.FromEmpID = FromEmpID) 
                 OR    (a.ToEmpID = FromEmpID AND a.FromEmpID = ToEmpID)) 
                 AND    SendDate > a.SendDate)


发件人                         收件人                                 最新日期
----------------------------- --------------------------------------------------------
李四                            张三                                   2014-06-07 00:00:00.000
张三                            王五                                   2014-05-07 00:00:00.000
刘六                            张三                                   2014-06-07 00:00:00.000
                            
(3 行受影响)  
  相关解决方案