2013-03-26 79 views
0

我有一个用于存储消息的名为tblMsg的表。我想获取发件人发布的最后一条消息(表Message中的一列)。在SQL Server 2005中使用MAX返回所有行而不是最后一行

这里是我的查询

Select 
    Max(MsgId), Sender, Receiver, Contents, 
    convert(nvarchar(20), SendTime, 120) as SendTime 
from 
    dbo.tblMessage 
where 
    Sender = @userName 
group by 
    Sender, Receiver, Contents, SendTime 

这里的问题是不是得到我得到了张贴的所有发件人

回答

2

问题消息的最后一条消息是,你的所有分组列,当你真的只想按SenderID列进行分组时。这里是一个办法做到这一点,得到了最后的消息或用户,使用CTE和窗口功能:

;WITH x AS 
(
    SELECT MsgId, Sender, Receiver, Contents, 
    SendTime = CONVERT(CHAR(20), SendTime, 120), 
    rn = ROW_NUMBER() OVER (PARTITION BY Sender ORDER BY SendTime DESC) 
    FROM dbo.tblMessage 
) 
SELECT MsgId, Sender, Receiver, Contents, SendTime 
    FROM x 
    WHERE rn = 1; 

当然,如果你只是在后一次一个发送器,你可以这样做完全没有分组:

SELECT TOP (1) MsgId, Sender, Receiver, Contents, 
    SendTime = CONVERT(CHAR(20), SendTime, 120) 
FROM dbo.tblMessage 
WHERE Sender = @userName 
ORDER BY SendTime DESC; 
0
SELECT TOP 1 MsgId,Sender,Receiver,Contents,convert(nvarchar(20),SendTime,120) as SendTime 
FROM dbo.tblMessage 
WHERE [email protected] 
ORDER BY MsgId DESC 
相关问题