从消息表中的对话中选取最新消息

时间:2017-03-02 13:42:04

标签: tsql

我有一个结构类似的消息表:

Messageid auto
FromUserID int
ToUserid Int
ConversationID int
Subject text
Message text
DateSent datetime
MessageRead bit

我需要编写一个查询,该查询返回每个对话的最后一条(最近的)消息的行(或者只是messageid,我可以自我加入)。从本质上讲,这意味着在给定的对话中(由conversationid表示),哪些消息是最新消息,以及消息的消息代码是什么。

我可以通过conversationid分组并询问max(datesent),但是如何获取该特定记录的messageid?

(这是一个生产数据库,因此我无法修改表结构。)

2 个答案:

答案 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