当您可以与其他用户交谈时,我正在尝试制作一个简单的Messenger应用程序,但是在尝试在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年1月1日17:05:22 然后与用户36和HELLO在2018-01-01 17:00:22 然后与用户37一起发送最后一条消息,您好吗,2018年1月1日01:02:03
我需要类似的条件,例如在查询中传递userid
时,它将检查userid
或FromUserId
中的所有ToUserId
消息。
答案 0 :(得分: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
答案 1 :(得分:1)
使用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;