How to get last message of all users who did chat with UserID 1. I want to apply group by on two feilds. The Database is like:
x
MessageID Message MessageCreatorUserID MessageRecieverUserID CreatedAt
1 HI 4 1
2 Hello 1 3
3 Bye 1 3
4 Thanks 1 2
5 hii 1 3
This is table and My question is:
UserID is stored in MessageCreatorUserID or MessageRecieverUserID
I want to get last message of all users, who did the chat with UserID 1.
Advertisement
Answer
Well, you can use window functions:
select t.*
from (select t.*,
row_number() over (partition by (case when MessageCreatorUserId = 1 then MessageReceiverUserId else MessageCreatorUserId end)
order by messageId desc
) as seqnum
from t
where 1 in (MessageCreatorUserId, MessageReceiverUserId)
) t
where seqnum = 1;