日期:2014-05-16  浏览次数:20542 次

求一条SQL ,类似QQ的最近联系人
聊天表:
id, sendUserID, recvUserID, content
行1:  1,   1,   2,   '2号你好'
行2:  2,   1,   3,   '3号你好'
行3:  3,   1,   4,   '4号你好'
行4:  4,   4,   1,   '我是4号,1号你好烦'
行5:  5,   2,   1,   '我是2号,1号你好烦'

想做成像QQ的最近聊天列表的方式,按ID倒序排序
希望结果如下:
  talkAboutUserID,content,id
  2, '我是2号,1号你好烦',5
 4, '我是4号,1号你好烦',4
3, '3号你好',2
------解决方案--------------------
多加了个表Users,这张表应该是有的,看下是不是符合要求。

IF OBJECT_ID('tempdb..#Users') IS NOT NULL
    BEGIN
        DROP TABLE #Users;
    END
GO

CREATE TABLE #Users
    (
      Id INT IDENTITY(1, 1)
             NOT NULL
             PRIMARY KEY ,
      Name VARCHAR(50) NOT NULL
    );
GO

INSERT  INTO #Users
VALUES  ( 'zhangsan' ),
        ( 'lisi' ),
        ( 'wangwu' ),
        ( 'zhaoliu' );
GO

IF OBJECT_ID('tempdb..#Messages') IS NOT NULL
    BEGIN
        DROP TABLE #Messages;
    END
GO

CREATE  TABLE #Messages
    (
      id INT IDENTITY ,
      sendUserID INT ,
      recvUserID INT ,
      content VARCHAR(100)
    );
    GO

INSERT  INTO #Messages
VALUES  ( 1, 2, '我是3号,2号你好' ),
        ( 1, 3, '3号你好' ),
        ( 1, 4, '4号你好' ),
        ( 4, 1, '我是4号,1号你好烦' ),
        ( 2, 1, '我是2号,1号你好烦' ),
        ( 3, 2, '我是3号,2号你好' );
GO

SELECT  *
FROM    #Users;
SELECT  *
FROM    #Messages;
GO

/*
查询标识为1的用户和其它用户的最后聊天记录;
*/
DECLARE @id INT = 1;

SELECT  t.*
FROM    #Users AS u
        CROSS APPLY ( SELECT TOP 1
                                *
                      FROM &nb