我有一个名为tblMsg
的表用于存储消息。我想获取发件人发布的最后一条消息(表Message
中的一列)。
这是我的查询
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
这里的问题不是获取最后一条消息,而是收到发件人发布的所有消息
答案 0 :(得分: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;
答案 1 :(得分:0)
SELECT TOP 1 MsgId,Sender,Receiver,Contents,convert(nvarchar(20),SendTime,120) as SendTime
FROM dbo.tblMessage
WHERE Sender=@userName
ORDER BY MsgId DESC