>>137
これではだめ?
実際に試してないから、このままで実行できるかわからないけど、
テーブル名をlogとした場合、

CREATE TEMPORARY TABLE temp
AS SELECT UserName, MAX(Date) AS Date, SUM(Amount) AS Amout
FROM log GROUP BY UserName;

SELECT * FROM temp, log
WHERE temp.UserName = log.UserName AND temp.Date = log.Date;

適切なインデックスを作成してあれば、速いはず。
ただ、設計自体が間違っているような気がしないでもないが...。