Предполагая, что все столбцы имеют совместимый тип (который вы проверяете), вы можете построить запрос, используя метаданные:
select group_concat(replace(replace('select max([column_name]) from [table_name]', '[column_name]', column_name), '[table_name]', table_name)
separator '\nunion all\n')
from INFORMATION_SCHEMA.COLUMNS
where table_schema = 'my_db' and
column_key = 'PRI' and
data_type LIKE '%int%'
order by TABLE_NAME, COLUMN_NAME;
Я бы просто скопировал запрос и запустил его. Но вы можете еще больше автоматизировать процесс, присвоив результирующей строке переменную и используя prepare
/ exec
.