監視用のフラグといいますと?

SUBSTRINGを取って原因を把握してみました。
whileループのときは、where `win_lose` = "w"をしてなかったんで、
wでもlでも最新のプロフィールを返していたようです。
というわけで、仕様としては上記でOKだったようです。

マニュアルにまったく同じことをやってる人がいたんですねぇ、、

「ただし、MAX と CONCAT を使用した、非効率的な手段を使用する必要があります。」
素直にテンポラリーテーブルを作るほうが効率がいいみたいですね。