я имел простую таблицу, которая хранит сообщения: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 |
+----+--------+----------+--------------+------+
Я хочу, чтобы выбрать самое последнее сообщение в беседе. Например, для б я хочу:
+--------------+--------------+------+
| 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 (текст), и вы должны увидеть – Cez
. Вы захотите присоединиться к этой таблице, чтобы получить соответствующее значение «text». –