2014-09-10 2 views
0
select DISTINCT first_name, last_name, picture, last_active, id_participante1, id_participante2, id_user, [message], dataHora from chat_b_users inner join utilizadores 
on chat_b_users.id_participante2 = utilizadores.id_user 
left join chat_talks on chat_b_users.id_chat = chat_talks.id_chat 
where id_participante1 = 1 
union all 
select DISTINCT first_name, last_name, picture, last_active, id_participante1, id_participante2, id_user, [message], dataHora from chat_b_users inner join utilizadores 
on chat_b_users.id_participante1 = utilizadores.id_user 
left join chat_talks on chat_b_users.id_chat = chat_talks.id_chat 
where id_participante2 = 1 order by last_active DESC 

Как я могу выбрать отличное значение?SQL Query возвращает один из

Мне нужно вернуть все эти данные даже нулями, но на каждого пользователя, как я могу это сделать?

результаты:

enter image description here

, как вы можете видеть на картинке, я два чатов от того же пользователя, я хочу только один из каждого.

+0

Вы пробовали 'SELECT DISTINCT'? – 2014-09-10 09:43:33

+0

Да, я пробовал, тот же результат – Severiano

+0

Вижу, 'DISTINCT' не работает, потому что комбинация отличается. Ваша метка времени делает их НЕ ОТКАЗЫВАЕТСЯ. Попробуйте 'MAX' с' last_active' и посмотрите, помогает ли это. Взгляните на [этот ответ] (http://stackoverflow.com/questions/5391564/how-to-use-distinct-and-order-by-in-same-select-statement) – 2014-09-10 09:47:51

ответ

2

попробовать это: добавить свой список (ы) колонки на месте не в коде, чтобы определить, какие строки вы хотите отобразить.

SELECT first_name, last_name, picture, last_active, id_participante1, id_participante2, id_user, [message], dataHora 
(
select DISTINCT first_name, last_name, picture, last_active, id_participante1, id_participante2, id_user, [message], dataHora , 
ROW_NUMBER (PARTITION BY <add_yr_colist> ORDER BY Last_Avtive DESC) AS RNUM 
from chat_b_users inner join utilizadores 
on chat_b_users.id_participante2 = utilizadores.id_user 
left join chat_talks on chat_b_users.id_chat = chat_talks.id_chat 
where id_participante1 = 1 OR id_participante2 = 1 
)TVC WHERE RNUM = 1 
+0

Что это? – Severiano

+1

добавьте список столбцов, которые будут идентифицировать одно конкретное окно. В вашем примере вам нужно отобразить сообщение OK для user_Id = 40, а затем заменить на user_id, который будет разбивать строки в разных окнах на основе значений user_id. Надеюсь, это объяснит. – Rishabh

+0

ошибка в "PARTITION BY" – Severiano

0

Вы должны использовать UNIION вместо UNION ALL, как показано ниже:

select DISTINCT first_name, last_name, picture, last_active, id_participante1, id_participante2, id_user, [message], dataHora from chat_b_users inner join utilizadores 
on chat_b_users.id_participante2 = utilizadores.id_user 
left join chat_talks on chat_b_users.id_chat = chat_talks.id_chat 
where id_participante1 = 1 
union 
select DISTINCT first_name, last_name, picture, last_active, id_participante1, id_participante2, id_user, [message], dataHora from chat_b_users inner join utilizadores 
on chat_b_users.id_participante1 = utilizadores.id_user 
left join chat_talks on chat_b_users.id_chat = chat_talks.id_chat 
where id_participante2 = 1 order by last_active DESC 

UNION удаляет повторяющиеся записи (где все столбцы в результатах одинаковы), UNION ALL не.

Difference betwwen UNION & UNION ALL

+0

, это не работает! – Severiano

+0

Каков результат – Amit

+0

такой же, как у другого – Severiano

Смежные вопросы