以最小值分組選出唯一行
在資料庫操作領域,常常會遇到這樣的任務:以特定欄位的最小值分組數據,同時選擇唯一行。假設您有一個表,其中每個唯一識別碼有多行,例如:
<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中文網其他相關文章!