首頁 > 資料庫 > mysql教程 > 如何在資料庫表中選擇以最小值分組的不同行?

如何在資料庫表中選擇以最小值分組的不同行?

Susan Sarandon
發布: 2025-01-17 20:12:10
原創
197 人瀏覽過

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檢索一行,表示具有最小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條目,這將導致多行結果。

為了解決這個問題,我們需要一個確保唯一行的解決方案。一種這樣的方法是使用內部連接和一個衍生表,該表計算每個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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板