如何使用JOIN从表中获取最新行

SHE*_*ETE 5 sql t-sql database sql-server sql-server-2008

我有5个表的连接,以获得每个成员发布的约有15列的任务.但是对于示例代码,我只使用了两个表.

SELECT TOP 5 
    dbo.MemberMst.MemberID, dbo.MemberMst.fname, 
    dbo.TaskMst.TaskMstID, dbo.TaskMst.OnDate, dbo.TaskMst.Description
FROM   
    dbo.MemberMst 
LEFT JOIN
    dbo.TaskMst ON dbo.MemberMst.MemberID = dbo.TaskMst.MemberID
Run Code Online (Sandbox Code Playgroud)

输出是:

MemberID fname  TaskMstID    OnDate                   Description
3    Ursula     NULL         NULL                      NULL
84   Opeyemi    30           2012-09-18 00:00:00.000     asd
85   test       21           2012-09-18 10:30:46.900     aaa
85   test       22           2012-09-18 10:31:04.967     eeee
85   test       23           2012-09-18 10:31:26.640     vvvv
Run Code Online (Sandbox Code Playgroud)

在上面的查询中,我为MemberID=853个任务发布了3行,但我只需要来自该成员的一个最新的任务.如何获取成员发布的最新任务,以便结果如下: -

MemberID fname  TaskMstID OnDate                Description
3    Ursula     NULL      NULL                   NULL
84   Opeyemi    30        2012-09-18 00:00:00.000   asd
85   test       23        2012-09-18 10:31:26.640   vvvv
Run Code Online (Sandbox Code Playgroud)

我的意思是说每个memberID任务只有一个记录?

帮助赞赏..!

提前致谢...!

Joh*_*Woo 4

由于您使用的是 SQL Server 2008,因此您可以利用Window Functions.

尝试这样的事情:

SELECT  c.MemberID, c.fname, c.TaskMstID, c.OnDate, c.Description
FROM
    (
        SELECT  a.MemberID, a.fname,
                b.TaskMstID, b.OnDate, b.Description,
                ROW_NUMBER() OVER (Partition BY a.MemberID ORDER BY b.OnDate DESC) RN
        FROM    MemberMst a
                LEFT JOIN TaskMst b
                    ON a.MemberID = b.MemberID
    ) c
WHERE c.RN = 1
Run Code Online (Sandbox Code Playgroud)