У меня есть SQL-запрос, который LEFT присоединяет к нему таблицу.Это приводит к тому, что строки из основной таблицы дублируются, но с разными строками из таблицы JOINed.Как выбрать только строки с самой высокой датой из таблицы JOINed.
Вот пример (это результат моего запроса):
ID Message Date
---------------------------
0 Hi 2011-01-01
0 Bye 2011-02-05
0 Hello 2011-04-20
1 Test 2010-12-31
1 Testing 2010-11-15
2 Something 2010-12-12
2 Nothing 2011-01-01
2 Yes 2010-02-05
3 Cool NULL
Я хочу одну строку на идентификаторстрока с самым высоким идентификатором.
ID Message Date
---------------------------
0 Hello 2011-04-20
1 Test 2010-12-31
2 Nothing 2011-01-01
3 Cool NULL
Мой текущий запрос выглядит примерно так (я только что сделал это, но он похож на настоящий):
SELECT t1.ID, t2.Message, t2.Date
FROM t1
LEFT JOIN (
SELECT t3.ID, t3.message, t3.Date
FROM t3
LEFT JOIN t4 ON t4.userID = 12 AND t3.ID = t4.ID
WHERE t4.color = 'blue'
) AS t2
ON t1.ID = t2.ID
WHERE t1.userID = 12
Думаю, я мог бы использовать PHP, просмотреть все результаты и выбрать те, которые мне нужны, но могу ли я сделать так, чтобы MySQL сделал это для меня?
EDIT : Извините, мой первый пример был way неправильно, это больше похоже на то, что я хочу.
EDIT 2 : я пытался использовать GROUP BY и MAX, но я думаю, что я делаю что-то не так.
Я пытался:
SELECT t1.ID, t2.Message, MAX(t2.Date)
FROM t1
LEFT JOIN (
SELECT t3.ID, t3.message, t3.Date
FROM t3
LEFT JOIN t4 ON t4.userID = 12 AND t3.ID = t4.ID
WHERE t4.color = 'blue'
) AS t2
ON t1.ID = t2.ID
WHERE t1.userID = 12
GROUP BY t1.ID
Но это дало мне:
ID Message Date
---------------------------
0 Hi 2011-04-20
1 Test 2010-12-31
2 Something 2011-01-01
3 Cool NULL
Как мне получить Сообщение, связанное с самой высокой датой.