MySQL で各グループの最後の行を取得する
MySQL で「group by」を使用して各グループの「最後の」行を収集するにはでは、次の効率的なアプローチを検討してください:
サブクエリメソッド:
一般的なアプローチの 1 つはサブクエリを使用することです:
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 JOIN (SELECT uid, MAX(id) id FROM foo GROUP BY uid) t2 ON t1.id = t2.id AND t1.uid = t2.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;
クエリの比較
EXPLAIN を使用してこれらのクエリの効率を分析できます。ステートメント。
テーブル構造とデータ:
CREATE TABLE foo ( id INT(10) NOT NULL AUTO_INCREMENT, uid INT(10) NOT NULL, value VARCHAR(50) NOT NULL, PRIMARY KEY (`id`), INDEX `uid` (`uid`) ); id, uid, value 1, 1, hello 2, 2, cheese 3, 2, pickle 4, 1, world
期待される結果:
id, uid, value 3, 2, pickle 4, 1, world
以上がMySQL で各グループの最後の行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。