show create table persone:
'CREATE TABLE `persone` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(45) NOT NULL,
`cognome` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=30029 DEFAULT CHARSET=latin1'

show create table chiamate:
'CREATE TABLE `chiamate` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_persona` int(11) NOT NULL,
`datachiamata` date DEFAULT NULL,
`rispostaallachiamata` varchar(300) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40440 DEFAULT CHARSET=latin1'

e di

codice:
explain select p.nome,p.cognome,tab3.datachiamata,tab3.rispostaallachiamata 
from persone as p
left join (
select * 
from 
(select concat(id_persona,max(datachiamata)) as ultima from chiamate
group by id_persona) as tab1
left join chiamate as tab2 
on tab1.ultima = concat(tab2.id_persona,tab2.datachiamata)) as tab3
on p.id = tab3.id_persona
Risultato:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, 'PRIMARY', 'p', 'ALL', '', '', '', '', 15062, ''
1, 'PRIMARY', '<derived2>', 'ALL', '', '', '', '', 9445, ''
2, 'DERIVED', '<derived3>', 'ALL', '', '', '', '', 9233, ''
2, 'DERIVED', 'tab2', 'ALL', '', '', '', '', 23619, ''
3, 'DERIVED', 'chiamate', 'ALL', '', '', '', '', 23619, 'Using temporary; Using filesort'