我有一个结构类似的消息表:
Messageid auto
FromUserID int
ToUserid Int
ConversationID int
Subject text
Message text
DateSent datetime
MessageRead bit
我需要编写一个查询,该查询返回每个对话的最后一条(最近的)消息的行(或者只是messageid,我可以自我加入)。从本质上讲,这意味着在给定的对话中(由conversationid表示),哪些消息是最新消息,以及消息的消息代码是什么。
我可以通过conversationid分组并询问max(datesent),但是如何获取该特定记录的messageid?
(这是一个生产数据库,因此我无法修改表结构。)
答案 0 :(得分:1)
select *
from
( select *
, row_number() over (partition by ConversationID order by DateSent desc) rn
from table
) tt
where tt.rn = 1
答案 1 :(得分:0)
不确定执行时间是否会短于Paparazzi ......但是您可以尝试使用内部联接:
select t.*
from table t
join (
select conversationid, max(datesent)
from table
group by conversationid
) x on x.conversationid = t.conversationid and x.datesent = t.datesent