我需要一个 mysql 查询,它将选择“to”或“from”列中包含“joe”的所有行。 “to”和“from”列之间需要不同,这意味着名称以什么顺序出现并不重要。即“joe”、“bob”应被视为与“bob”、“相同”乔”。如果一对名称中有重复,则选择具有最大 id 的名称。最终表也应该按 id 降序排序。例如,在下表上运行查询:
之前:
id to from
---|-----|------
1 | joe | bob |
2 | bob | hal |
3 | joe | joe |
4 | sue | joe |
5 | bob | bob |
6 | bob | joe |
7 | hal | hal |
8 | joe | bob |
之后:
id to from
---|-----|------
8 | joe | bob |
4 | sue | joe |
3 | joe | joe |
最佳答案
尝试使用 GROUP BY,按字母顺序(从、到)进行分组:
SELECT id, `from`, `to`
FROM yourtable
WHERE id IN
(
SELECT MAX(id)
FROM yourtable
WHERE `from` = 'joe' OR `to` = 'joe'
GROUP BY LEAST(`from`, `to`), GREATEST(`from`, `to`)
)
ORDER BY id DESC
查看它在线运行:sqlfiddle
关于MYSQL查询与distinct和max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11271234/