具有不同和最大的MYSQL查询

时间:2012-06-30 03:46:09

标签: mysql sql

我需要一个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 |

2 个答案:

答案 0 :(得分:2)

尝试按字母顺序排序的(从,到)分组的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

答案 1 :(得分:0)

嗯...我可以接近:

SELECT inside.id, inside.`to` , inside.`from` 
FROM (
  SELECT MAX( id ) id,  `to` ,  `from` 
  FROM people
  WHERE  `to` =  'joe'
  OR  `from` =  'joe'
  GROUP BY  `to` ,  `from`
)inside
ORDER BY inside.id DESC

但是这并没有给出你想要的结果,因为当交换to和from时它仍然存在欺骗。

我尝试使用某些UNION,但这实际上最终会使问题复杂化,因为它最终会创建更多唯一列(我会交换tofrom的顺序让所有的乔进入同一列)。如果您在没有考虑tofrom问题的情况下获得了正确的唯一行,则很难将其恢复到tofrom don'的位置t 很重要。

也许这会让你开始,而我却更加困惑。