問題:
同様のクエリを使用して、MySQL テーブル内の各グループの最後の行を作成します。 to:
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
考えられる解決策:
次の代替クエリを検討してください:
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
説明:
このクエリは、テーブル内の各行を ID に基づいて後続行と左結合します。 カラム。後続行が存在しない場合 (つまり、グループ内の最後の行である場合)、t2.id 列は NULL になります。 NULL をフィルタリングすることで、各グループの最後の行を効果的に分離します。
追加メモ:
元のクエリと代替クエリのクエリ パフォーマンスを分析するには、EXPLAIN を使用します。
この方法は、大規模なデータセットや複雑なグループ化に特に役立ちます。単純なケースでは、他のアプローチの方が効率的である可能性があります。
以上がMySQL でグループごとの最後の行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。