2013-12-26 2 views
1

Я пытаюсь создать список сообщений или список сообщений так же, как Facebook или whatsapp, мои записи сохраняются в таблице сообщений, подобной этой. enter image description hereКак получить уникальные записи в нескольких столбцах в sql-сервере

Здесь м экономии ToprofileId (идентификатор пользователя) и FromProfileId (идентификатор пользователя) пользователя 206 посылает сообщение пользователя 214 (идентификатор сообщения 515), пользователь 214 раз отвечать на пользователь 206 (MESSAGEID 516). сообщение отправлено пользователем от 200 до 206 (messageid 517) Другое сообщение отправляет пользователь от 206 до 184 (messageid 517). Теперь я хочу отображать как заголовок разговоров. (пользователь: 214-206 или 206-214) как одна строка То же, что и другие, если они также делают беседу.

Предположим, что мой идентификатор пользователя равен 206, а затем если m получает какое-либо сообщение или отправляет какое-либо сообщение, его следует использовать в качестве отдельной беседы. enter image description here Показать последнее сообщение в этом чате.

enter image description here

Остающиеся выглядит вроде как

страница Список сообщений выглядит как страница Facebook, как enter image description here

MsgID |toId|fromID |isR|isF|isAl|Message|DateTime    |TargetUser 
515 |214 |206 |1 |0 |0 |hiiii |2013-12-26 12:19:51 |214 
516 |206 |214 |0 |0 |0 |hello, |2013-12-26 12:21:44 |214 
517 |206 |200 |1 |0 |0 |message|2013-12-26 12:22:59 |200 
518 |184 |206 |0 |0 |0 |message|2013-12-26 14:52:30 |184 
519 |200 |206 |0 |0 |0 |1a  |2013-12-26 16:11:58 |200 
520 |200 |206 |0 |0 |0 |2b  |2013-12-26 16:12:02 |200 
521 |200 |206 |0 |0 |0 |3a  |2013-12-26 16:12:04 |200 
531 |200 |206 |1 |0 |0 |13  |2013-12-26 16:12:24 |200 
532 |206 |200 |0 |0 |0 |14  |2013-12-26 16:12:34 |200 

Мне нужны все строки, основанные на уникальных TargetUsers, результат должен быть следовать

MsgID |toId|fromID |isR|isF|isAl|Message|DateTime    |TargetUser 
516 |206 |214 |0 |0 |0 |hello, |2013-12-26 12:21:44 |214 
517 |206 |200 |1 |0 |0 |message|2013-12-26 12:22:59 |200 
518 |184 |206 |0 |0 |0 |message|2013-12-26 14:52:30 |184 

ответ

0

Если я вас понимаю, верно, то вы хотите запрос SQL, чтобы получить все преобразования для одного пользователя и его дату, чтобы показать, как изображение вы даете:

сделать этот запрос:

Select FromProfileId, Message, DateTime 
From MessagingTable 
Where ToProfileId = 206 
And MessageId in (Select Max(MessageId) From MessagingTable Group By FromProfileId) 

Он Покажет Нравится это:

FromProfileId. | Message | DateTime 
214   | "hiii" | 2013-12-26 10:22 
201   | "brb" | 2013-12-26 10:15 

Это то, что вы хотите ??

+0

жаль, что вы could't понять проблема. Предположим, что мой идентификатор пользователя равен 206, поэтому я получил сообщение от идентификатора пользователя 206, а затем снова ответил на 214 (выше первых двух строк). его один разговор между двумя пользователями (206 и 214). После этого я получил сообщение от идентификатора пользователя 200, это также разговор, после чего я отправляю сообщение на идентификатор пользователя 184, это также другой разговор. теперь у меня есть 3 беседы, я хочу показать все эти три разговора с его последним сообщением. Будет n количество разговора. Для большей идеи посмотрите Facebook, список сообщений. Мне нужно то же самое, что и – SiwachGaurav

+0

Я обновляю свой ответ. –

0

Вы можете сделать что-то вроде этого при поиске пользователя 206:

Select Max(MessageId), PartnerId 
From 
(
    Select MessageId, 
     PartnerId = FromProfileId 
    From MessagingTable 
    Where ToProfileId = 206 
    Union All 
    Select MessageId, 
     PartnerId = ToProfileId 
    From MessagingTable 
    Where FromProfileId = 206 
) Messages 
Group By PartnerId 
0

благодарю Вас за ответ, у меня есть найти решение этой проблемы,

select *, ROW_NUMBER() over(order by outerRow)as Row from 
(select * ,Row_Number() over (partition by a.TargetUser order by a.datetime desc)as  
outerRow from 
(select *, case when ToProfileID=206 then FromProfileID when 
FromProfileID=206 then ToProfileID end as TargetUser from Message 
where ToProfileID=206 or FromProfileID=206)a)b where b.outerRow=1 
Смежные вопросы