ホームページ > データベース > mysql チュートリアル > MySQL で各グループの最後の行を効率的に取得するにはどうすればよいですか?

MySQL で各グループの最後の行を効率的に取得するにはどうすればよいですか?

DDD
リリース: 2024-12-24 12:41:11
オリジナル
170 人が閲覧しました

How to Efficiently Retrieve the Last Row for Each Group in MySQL?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート