当您可以与其他用户交谈时,我正在尝试制作一个简单的信使应用程序,但是我在尝试在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
的消息都在FromUserId
或ToUserId
中。
使用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