考慮以下包含文件資訊的表格:
id | rev | content |
---|---|---|
1 | 1 | ... |
2 | 1 | ... |
1 | 2 | ... |
1 | 3 | ... |
目標是為每個id檢索一行,僅包含具有最大修訂號(rev)的文件。給定資料的期望輸出為:
id | rev | content |
---|---|---|
1 | 3 | ... |
2 | 1 | ... |
此問題通常出現在SQL中,提示使用者尋找給定群組識別碼的欄位中具有最大值的數 據行。
第一種方法涉及建立子查詢,該子查詢標識群組標識符 (id) 和 rev 列中的最大值。可以使用群組標識符和最大值上的相等條件將此子查詢與主表連接。
<code class="language-sql">SELECT a.id, a.rev, a.contents FROM YourTable a INNER JOIN ( SELECT id, MAX(rev) rev FROM YourTable GROUP BY id ) b ON a.id = b.id AND a.rev = b.rev</code>
第二種方法利用左連接操作將表格與其自身關聯。在群組標識符 (id) 上指定相等條件。為確保僅選擇具有最大 rev 值的行,請新增一個條件來檢查右側 rev 值是否小於左側 rev 值。最後,套用過濾器以僅顯示右側 rev 值為 NULL 的行(指示存在最大 rev 值)。
<code class="language-sql">SELECT a.* FROM YourTable a LEFT OUTER JOIN YourTable b ON a.id = b.id AND a.rev < b.rev WHERE b.id IS NULL;</code>
兩種解決方案都產生相同的結果,並且與SQL ANSI相容。最合適的選擇取決於個人喜好和特定的資料庫效能特徵。建議進行基準測試以確定不同場景下的最佳方法。
以上是如何僅使用SQL中的列中使用最大值選擇行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!