奇怪的行为,我做了一个简单的表,用于存储信息:MySQL的:使用UNION,MAX和GROUP BY
+----+--------+----------+--------------+------+
| id | sender | receiver | dt | text |
+----+--------+----------+--------------+------+
| 1 | a | b | ..19.26.00.. | msg1 |
+----+--------+----------+--------------+------+
| 2 | c | b | ..19.26.02.. | msg2 |
+----+--------+----------+--------------+------+
| 3 | b | a | ..19.26.03.. | msg3 |
+----+--------+----------+--------------+------+
我想选择在交谈最近的消息。例如,对于B我想:
+--------------+--------------+------+
| conversation | MAX(maxdt) | text |
+--------------+--------------+------+
| ab | ..19.26.03.. | msg3 |
+--------------+--------------+------+
| cb | ..19.26.02.. | msg2 |
+--------------+--------------+------+
所以我用这个查询:
SELECT conversation, MAX(maxdt), text FROM
(SELECT CONCAT(sender, receiver) AS conversation, MAX(dt) AS maxdt, text
FROM message
WHERE receiver='b' GROUP BY conversation
UNION
SELECT CONCAT(receiver, sender) AS conversation, MAX(dt) AS maxdt, text
FROM message
WHERE sender='b' GROUP BY conversation) AS x
GROUP BY conversation
但结果是:
+--------------+--------------+------+
| conversation | MAX(maxdt) | text |
+--------------+--------------+------+
| ab | ..19.26.03.. | msg1 |
+--------------+--------------+------+
| cb | ..19.26.02.. | msg2 |
+--------------+--------------+------+
因此,日期时间值是正确的,但文字来自错误的元组!
有什么建议吗? SQL Fiddle
即其中文本字段在表中列出的顺序; GROUP_CONCAT(text),你应该看到 – Cez
你会想回到那张表来获得适当的'text'值。 –