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任务只有一个记录?
帮助赞赏..!
提前致谢...!
由于您使用的是 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)