таблица примерно такой структуры: fid last_post author 1 10 1 1 11 2 1 12 5 2 9 2 select max(last_post), author group by fid выдает 12 1 что-то меня клинит, но должно выдавать 12 5... если не клинит, то как получить автора именно последнего сообщения, а не время последнего и автора первого. заранее спасибо.
Что нужно? Получить max(last_post) и его автора для каждого fid? [sql]select fid, last_post, author from newTab where last_post in (select max(last_post) from newTab group by fid)[/sql] Ну а если нужно только последнее сообщение и его автор, то убираем group by: [sql]select last_post, author from newTab where last_post in (select max(last_post) from newTab)[/sql]
м, а про подзапрос я не подумал. имхо, как-то проще тема должна решаться.. P.S. спасибо за работоспособный вариант
MiksIr ну, забыл from table добавить, имхо, направление исходного запроса от этого не стало менее очевидным) а на тему нормальности / ненормальности той или иной субд - не будем начинать холивар.
Дело не в from, а в author. Поле author не участвует в агрегирующей функции и не указано в group by. Таким образом совершенно не понятно какого автора надо сопоставить какой группе.
[sql]SELECT last_post, author FROM tab order by last_post desc limit 1[/sql] один запрос все лучше чем два
Volt(220) есть запись. у которой одно из полей выбирается с помощью агрегирующей функции, в моем случае - максимальное значение. кмк, логично, если в данном случае значения остальных полей в выборке оказываются значениями соответствующих полей в выбранной записи. я же не сумму считаю (там поведение с выбором первой записи из списка и подстановкой суммы если и не логично, то хотя бы объяснимо), а выбираю конкретную запись. Pascal4eg все бы хорошо, если бы там третьего поля не было - fid. А если их миллион уникальных будет - миллион запросов слать к базе?
DarkElf В корне неверно. Вы выбираете не одно из полей с помощью агрегирующей функции, а результат по группе. Это для Вас, меня, соседа логично, а для СУБД не логично. Она думает немного по-другому.
armadillo это движок форума. трехуровневой иерархии форум / топик(и) / сообщение(я). у каждого топика есть характеристика в виде автора и timestamp'а последнего сообщения. задача: для каждого форума определить время и автора самого последнего сообщения. Volt(220) я и написал - кмк (как мне кажется)