一個相當複雜的SQL查詢我工作讓我思考(ANSI)SQL的限制:檢索最大/最小記錄
有沒有一種方法來檢索記錄是最大或最小相對於一任意排序?
換句話說:
鑑於這樣的查詢:
SELECT * FROM mytable WHERE <various conditions> ORDER BY <order clause>
是有可能寫的是(通過變換順序條款到別的可能)只返回第一行查詢?
我知道你可以做到這一點使用LIMIT(MySQL的)/ ROWNUM(甲骨文)或類似的,但是這不是標準的SQL。我也知道你可以通過在子查詢中獲取你感興趣的最大/最小值(使用MIN()/ MAX())來做到這一點,然後在你的主要SELECT中使用該結果作爲標準,即:
SELECT * FROM mytable WHERE <various conditions> AND myMaxColumn=(
SELECT MAX(myMaxColumn) FROM mytable WHERE <various conditions>
)
但是,這隻能如果我想通過一個單一的列進行排序。我沒有辦法將其推廣到多列(除了嵌套上述解決方案,但這意味着當由n個coluns排序時,會有2^n個SELECT)。
那麼,有沒有標準SQL更好的方式比嵌套多個子選擇?
一個相關的問題是Create a SQL query to retrieve most recent records問。然而,問題的答案有建議或者使用LIMIT &的朋友,或者使用子查詢與MAX()如上所述,這兩者是不是我的問題的解決方案。
注意:剛剛發現了一個類似的問題:http://stackoverflow.com/questions/121387/fetch-the-row-which-has-the-max-value-for-a-column – sleske 2012-03-28 16:01:03