一个相当复杂的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