ホームページ > データベース > mysql チュートリアル > データベーステーブル内の最小値でグループ化された個別の行を選択するにはどうすればよいですか?

データベーステーブル内の最小値でグループ化された個別の行を選択するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-17 20:12:10
オリジナル
200 人が閲覧しました

How to Select Distinct Rows Grouped by Minimum Value in a Database Table?

最小値でグループ化された一意の行を選択します

データベース操作の分野では、一意の行を選択しながら、特定のフィールドの最小値によってデータをグループ化するタスクによく遭遇します。たとえば、一意の識別子ごとに複数の行を含むテーブルがあるとします。

<code>| key_id | id | record_date | other_cols |
|---|---|---|---|
| 1 | 18 | 2011-04-03 | x |
| 2 | 18 | 2012-05-19 | y |
| 3 | 18 | 2012-08-09 | z |
| 4 | 19 | 2009-06-01 | a |
| 5 | 19 | 2011-04-03 | b |
| 6 | 19 | 2011-10-25 | c |
| 7 | 19 | 2012-08-09 | d |</code>
ログイン後にコピー

目標は、各一意の ID から 1 つの行を取得し、最も小さい Record_date を持つ行を表すことです。

一般的なアプローチは、サブクエリを使用して各 ID の最小の Record_date を特定し、それを元のテーブルに結合し直すことです。

<code>SELECT *
FROM t
WHERE record_date = (SELECT MIN(record_date) FROM t WHERE id = t.id)</code>
ログイン後にコピー

ただし、このメソッドは同じ ID を持つ重複する最小の Record_date エントリを処理できないため、結果が複数行になります。

この問題を解決するには、一意の行を保証するソリューションが必要です。そのようなアプローチの 1 つは、内部結合と、各 ID の最小の Record_date を計算する派生テーブルを使用することです:

<code>SELECT mt.*     
FROM MyTable mt INNER JOIN
    (
        SELECT id, MIN(record_date) AS MinDate
        FROM MyTable
        GROUP BY id
    ) t ON mt.id = t.id AND mt.record_date = t.MinDate</code>
ログイン後にコピー

内部結合は、各 ID の最小の Record_date を持つ行のみが選択されることを保証し、最小値でグループ化された一意の行のテーブルを効果的に生成します。

以上がデータベーステーブル内の最小値でグループ化された個別の行を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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