У меня есть таблица с 3 столбцами с именем msg, отправитель и получатель. Теперь мне нужно получить четкого отправителя и получателя. но здесь, если у меня есть отправитель a и получатель b или отправитель b и получатель a, он показывает мне оба. но я хочу только последний.

msg | sender | receiver
hi  | 1      | 5
he  | 2      | 6
jh  | 5      |1

SELECT DSTINCT `sender`, `receiver` from `table`

Это дает мне этот результат

1-5
2-6
5-1

Но мне нужно

5-1
2-6

Есть ли SQL-запрос, который может решить эту проблему?

0
Robiul Islam 30 Май 2019 в 13:03

2 ответа

Лучший ответ

Конечно, давайте использовать тот факт, что они являются целыми числами и всегда помещаем меньший в первый столбец и больший в правый столбец.

SELECT DISTINCT
  CASE WHEN sender < receiver THEN sender ELSE receiver END as PartyA,
  CASE WHEN sender < receiver THEN receiver ELSE sender END as PartyB
from `table`

Он не дает 5-1 (1-5), но я думаю, что вам все равно, вам нужен уникальный список людей, у которых был разговор, и 5-1 == 1-5

0
Caius Jard 30 Май 2019 в 10:07

Вы также можете сделать это, используя функции least() и greatest()

select distinct least(sender , receiver), greatest(sender , receiver) 
from t
0
Oto Shavadze 30 Май 2019 в 10:24