Как получить только последние сообщения для каждого разговора в MSSQL - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь создать простое приложение для обмена сообщениями, когда вы можете общаться с другими пользователями, но я работаю над некоторой проблемой, пытаясь создать в 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 с HELLO в 2018-01-01 17:00:22 Затем с пользователем 37 с последним сообщением Как дела на 2018-01-01 01: 02: 03

Мне нужно что-то вроде того, когда я передаю userid в запросе, он проверит все сообщения, где userid находится в FromUserId или ToUserId.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Использование 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;
0 голосов
/ 05 сентября 2018

Использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...