我有一个包含3列的表,分别名为msg、sender和receiver。现在我需要得到不同的发送者和接收者。但是在这里,如果我有发送者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查询可以解决这个问题?
发布于 2019-05-30 18:07:38
当然,让我们利用你是整数的事实,并且总是把小的放在第一列,把大的放在右边的列
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
发布于 2019-05-30 18:24:06
也可以使用least()
和greatest()
函数执行此操作
select distinct least(sender , receiver), greatest(sender , receiver)
from t
https://stackoverflow.com/questions/56375985
复制相似问题