. При группировке невозможно использовать ×. Иначе нужное поле будет исключено из группировки. Из этого вытекает, что col1 и col3 не исользуются в группировке и должны быть исключены из запроса.
Но если очень хочется, то можно сделать так:
Select *, (select update-time from table t2 where t2.column_2=t1.column_2 order by update_time desc limit 1) as max_time
From table t1
Это очень просто. Группировка идет по тем полям, указынным в выражении group by. Все остальные (если они требуются) должны быть агрегатными: sum, avg, max, min и т.д. То есть запрос берет повторяющиеся значения по group by и проводит по ним операции с аграгатмыми выражениями. having дает возможност использовать такое агрегатное выражение в условии (если оно требуется).
Я тут почесал тыковку немножко и понял, что ван не хватает для получения одного набора из другого. ни group by, ни having совсем не нужны.
Select *, update_time as max_time
From table t1
where
update_time = (select update_time from table t2 where t2.column_2=t1.column_2 order by update_time desc limit 1)
или
Select *, update_time as max_time
From table t1
where
update_time = (select max(update_time) from table t2 where t2.column_2=t1.column_2 )
скорость обравотки группировок обычно ниже, чем простой селек о ордер. поэтому первый запрос немного быстрее - просто берем список по условию, сортируем его в нужном порядке и выбираем только первую запись. Так мы получаем довольно быстрый max или min.