It can be done without a temporary table using a self-join. I am surprised that the documentation mentions the MAX-CONCAT trick as the only way to do it in a single query, especially with the knowledge that it is inefficient.
The query that you are looking for is
SELECT name, t1.date, t1.payment_amount
FROM customers, payment t1, payment t2
WHERE customers.customer_id = t1.customer_id AND
t1.customer_id = t2.customer_id
GROUP BY name, t1.date, t1.payment
HAVING t1.date = MAX(t2.date);
This will return the customer's name, the date of their last payment and the amount. You might have to do some changes to the query to make it work in your database, so be sure that if you are selecting any fields, they should come from table t1 and the GROUP BY clause needs to mention them.