【问题标题】:SQL - How to select a row having a column with max value in OracleSQL - 如何在 Oracle 中选择具有最大值列的行
【发布时间】:2019-02-12 03:45:15
【问题描述】:
date            value
18/5/2010        40
18/5/2010        20
20/5/2010        60
18/5/2010        30
17/5/2010        10
16/5/2010        40
18/5/2010        60
18/5/2010        25 

输出

date           value
18/5/2010        60
20/5/2010        60

我需要查询具有最大值(值)(即 60)的行。所以,这里我们得到两行。 日期可以是任意顺序

请不要使用 rownumsubquery 我需要一个动态查询

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    我相信这就是您正在寻找的:

    select *
    from table
    where value = (select max(value) from table);
    

    【讨论】:

    • @mayank 上面的查询会给出你想要的
    • 这就是我需要没有 rownum 的解决方案
    • 优化的解决方案不仅仅依赖于查询。它还取决于您有哪些可用的索引、统计信息等。在这种情况下,您至少应该拥有value 列上的索引。
    • 实际上我有一个包含超过 20000 行的表我必须通过使用 where 子句中的各种条件来选择 8 列所以...这就是为什么我需要我的它的解决方案没有子查询...那么你能做到吗
    【解决方案2】:

    select * from (select * from table order by value desc, date_column) where rownum = 1;

    更具体地回答问题:

    select high_val, my_key from (select high_val, my_key from mytable where something = 'avalue' order by high_val desc) where rownum <= 1

    【讨论】:

    • 谢谢你 :) 这么多
    【解决方案3】:

    这很有效,而且非常简单:

    SELECT MAX(value)
    FROM table
    

    【讨论】:

    • 这是错误的。他特别说“我需要查询具有 max(value) 的行”——不仅仅是最大值,而是整行。
    猜你喜欢
    • 2011-02-20
    • 2021-05-19
    • 2021-08-16
    • 2021-07-23
    • 1970-01-01
    • 2015-11-10
    • 2021-04-26
    • 2020-01-27
    相关资源
    最近更新 更多