Código sql:
Ver originalSELECT personas.nombre, t1.fecha, casas.casa FROM personas
INNER JOIN casas ON casas.propietario = personas.id
INNER JOIN (SELECT MAX(fecha_compra) fecha, propietario FROM casas GROUP BY propietario)t1
ON t1.propietario = personas.id AND t1.fecha = casas.fecha_compra
ORDER BY t1.fecha DESC LIMIT 5
1) el centro de la cebolla: busco la última fecha de cada propietario:
SELECT Max(fecha_compra) fecha, propietario FROM casas GROUP BY propietario
y nombro esa consulta con el alias t1.
2) hago un cruce mediante inner join entre la tabla personas y la tabla casas uniendo por casas.propietario y personas.id, y
3) hago un cruce también con inner join de esas tablas ya cruzadas con la consulta t1, obligando a que coincidan el máximo y el propietario (con AND) de t1 con los del cruce de esas dos tablas
4) luego ordeno descendente el resultado de ese cruce por t1.fecha y limito a los 5 primeros.