如何在 MSSQL 中仅获取每个会话的最后消息



当您可以与其他用户交谈时,我正在尝试制作一个简单的信使应用程序,但是我在尝试在MSSQL中创建查询以获取与其他用户的所有对话但只有最后一条消息时遇到了一些问题,因此它会在决定他想要进入哪个对话并阅读其所有消息之前向用户显示。

我有一张这样的桌子

ID      FromUserId      ToUserId        Message             SentDate                        Seen
1           32              35        HEY               2018-01-01 01:02:01         False
2           35              32        How are you       2018-01-01 01:02:07         False
3           32              36        HELLO             2018-01-01 17:00:22         False
4           37              32        Hey Buddy         2018-01-01 17:05:22         False

我想得到的结果将如下所示:

ID      FromUserId      ToUserId        Message             SentDate                        Seen
4           37              32        Hey Buddy         2018-01-01 17:05:22         False
3           32              36        HELLO             2018-01-01 17:00:22         False
2           35              32        How are you       2018-01-01 01:02:07         False

所以最后一次对话是与用户 37 的最后一条消息 Hey Buddy 在 2018-01-01 17:05:22 然后与用户 36 在 2018-01-01 17:00:22 使用 HELLO 然后与用户 37 与最后一条消息你好吗 2018-01-01 01:02:03

我需要类似的东西,例如当我在查询中传递userid时,它将检查所有userid的消息都在FromUserIdToUserId中。

使用row_number()函数:

select t.*
from (select t.*, row_number() over (partition by FromUserId order by SentDate desc) as seq
from table t
) t
where seq = 1;

使用 row_number((

select * from 
(select ID,FromUserId ,ToUserId,Message,SentDate,Seen,
row_number() over (partition by FromUserId order by sentdate desc) as rn
from tablename) a where rn=1

最新更新