Я пытаюсь применить левый трюк к таблицам ниже.Этот трюк хорошо задокументирован здесь и включает в себя левое самостоятельное объединение при сравнении поля, для которого требуется минимальное или максимальное значение, затем левое объединение дает нулевое значение для строки минимального или максимального значения, затем вы выбираете этонулевое совпадениеОднако у меня есть проблема, решающая эту проблему, когда групповое поле находится на другом столе.Приведенные ниже таблицы объединены сообщением messjoin.fk_mess = message.id, и я включил мою лучшую попытку выполнить запрос.В настоящее время не удается выполнить группировку.
Вот пример fiddle , когда группа находится в той же таблице, что и поле min / max
CREATE TABLE messages(`id` int, `when` date);
CREATE TABLE messjoin(`grp` int, `fk_mess` int);
INSERT INTO messages
(`id`, `when`)
VALUES
(1,'2000-08-14'),
(2,'2000-08-15'),
(3,'2000-08-16'),
(4,'2000-08-17'),
(5,'2000-08-18'),
(6,'2000-08-19');
INSERT INTO messjoin
(`grp`, `fk_mess`)
VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 4),
(2, 5),
(2, 6);
select p1.*, m1.*, m2.*
from messjoin p1
inner join messages m1 on p1.fk_mess = m1.id
inner join messjoin p2 on p2.fk_mess = m1.id
left join messages m2 on p2.grp = p1.grp and m1.when < m2.when
where m2.id is null;
+------+---------+------+------------+------+------+
| grp | fk_mess | id | when | id | when |
+------+---------+------+------------+------+------+
| 2 | 6 | 6 | 2000-08-19 | NULL | NULL |
+------+---------+------+------------+------+------+
ЧтоЯ хочу, чтобы получить максимальную дату для каждой группы .grp, например, так:
+------+---------+------+------------+------+------+
| grp | fk_mess | id | when | id | when |
+------+---------+------+------------+------+------+
| 1 | 3 | 3 | 2000-08-16 | NULL | NULL |
| 2 | 6 | 6 | 2000-08-19 | NULL | NULL |
+------+---------+------+------------+------+------+
Я не хочу агрегатную функцию или решение подзапроса!И это в MySQL Спасибо!