你可以正常化的身份識別碼和用戶ID列這樣
select *,
case
when myid < userid then myid
else userid
end as u1,
case
when myid > userid then myid
else userid
end as u2
from t
給
+------+------+--------+------+------+
| id | myid | userid | u1 | u2 |
+------+------+--------+------+------+
| 1 | 123 | 321 | 123 | 321 |
| 2 | 321 | 123 | 123 | 321 |
| 3 | 123 | 444 | 123 | 444 |
| 4 | 444 | 123 | 123 | 444 |
| 5 | 123 | 555 | 123 | 555 |
+------+------+--------+------+------+
然後制定出最大的ID這樣
select max(id) from
(
select *,
case
when myid < userid then myid
else userid
end as u1,
case
when myid > userid then myid
else userid
end as u2
from t
) s
group by u1,u2
到給這個
+---------+
| max(id) |
+---------+
| 2 |
| 4 |
| 5 |
+---------+
,然後加入t等這樣
select t.*
from t
where id in
(
select max(id) from
(
select *,
case
when myid < userid then myid
else userid
end as u1,
case
when myid > userid then myid
else userid
end as u2
from t
) s
group by u1,u2
)
給這個
+------+------+--------+
| id | myid | userid |
+------+------+--------+
| 2 | 321 | 123 |
| 4 | 444 | 123 |
| 5 | 123 | 555 |
+------+------+--------+
無需任何硬編碼!如果你更喜歡第一個會話,則將最大值改爲最小值。
你到底想要什麼?每行都有一個'123',那麼爲什麼你不希望每行都返回? –
如果我有消息,並且我想在每個會話中只有最後一行獲得2個用戶 – Skyey