Страницы

Поиск по вопросам

среда, 29 января 2020 г.

SQL-запрос для выборки последних записей

#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

Комментариев нет:

Отправить комментарий