#mysql #sql
Есть таблица messages, имеющая следующий вид : _id (prim key), author, client, time, content. Пусть она имеет такие значения : _id | author | client | time | content -------------------------------------- 1 | user | you | 21:52 | hi 2 | user | you | 20:43 | wassup 3 | user2 | you | 17:45 | привет 4 | user2 | you | 18:20 | :( Из этой таблицы нужно получить по ОДНОМУ (последнему) сообщению от каждого author'a, где client = you. Т.е. с помощью запроса необходимо вернуть сообщения с id 1 и 4 (hi и :(). Как это можно сделать?
Ответы
Ответ 1
Действительно здесь ошибка: SELECT * FROM `table` WHERE `client` = 'you' GROUP BY `author` ORDER BY `time` DESC; Сортировка происходит после групировки, Вам необходим такой запрос: SELECT `message`.* FROM `message` INNER JOIN ( SELECT max(`time`) AS `maxTime`, `author` FROM `message` GROUP BY `author` ) AS `max` ON (`max`.`author` = `message`.`author` // При возможности связать по ID AND `max`.`maxTime` = `message`.`time` AND `client` = 'you' ) ORDER BY `time` DESC;Ответ 2
sqlfiddle SELECT t1.* FROM test t1 INNER JOIN (SELECT author, client, max(time) as mtime FROM test WHERE client = 'you' GROUP BY author, client) t2 ON t1.author = t2.author AND t1.client = t2.client AND t1.time = t2.mtime
Комментариев нет:
Отправить комментарий