【问题标题】:oracle - sql query select max from each baseoracle - sql查询从每个基础中选择最大值
【发布时间】:2014-03-17 21:45:30
【问题描述】:

我正在尝试解决这个查询,我需要在每个基地找到最高余额。余额在一个表中,基数在另一个表中。

这是我现有的查询,它返回所有结果,但我需要找到一种方法将其限制为每个 baseID 1 个顶级结果。

SELECT o.names.name t.accounts.bidd.baseID, MAX(t.accounts.balance)
FROM order o, table(c.accounts) t
WHERE t.accounts.acctype = 'verified'
GROUP BY o.names.name, t.accounts.bidd.baseID;
  • accounts 是一个嵌套表。

这是输出

      Name        accounts.BIDD.baseID        MAX(T.accounts.BALANCE)
 ---------------  ------------------------- ---------------------------
 Jerard            010                       1251.21 
 john              012                       3122.2 
 susan             012                       3022.2 
 fin               012                       3022.2 
 dan               010                       1751.21 

我希望显示的结果是计算每个 baseID 的最高余额,并且只显示该 baseID 的一条记录。

所以输出看起来只会显示 baseID 012 的 john,因为他的值最高。

任何指向正确方向的指针都会很棒。

【问题讨论】:

    标签: sql oracle oracle11g oracle-sqldeveloper


    【解决方案1】:

    我认为问题是“名称”列的原因。由于您将三个名称映射到一个基本 id(12),因此它将所有三个记录视为唯一记录并将它们单独分组而不是一起分组。 尝试忽略选择查询和“分组依据”子句中的“名称”列。

    SELECT t.accounts.bidd.baseID, MAX(t.accounts.balance)
    FROM order o, table(c.accounts) t
    WHERE t.accounts.acctype = 'verified'
    GROUP BY t.accounts.bidd.baseID;
    

    【讨论】:

    • 嗨,这个问题,刚刚发现如果我不选择名称,查询可以完美运行。但是我需要显示查询中关联的名称,但我想不出解决方案。不过谢谢。 :)
    • 嗨,我已经让它工作了 :) :) 你可以将它作为子查询传递,它就像一个魅力。示例如下: select name,d.* from (select base_id,max(bal) c from table_1 group by base_id)d,table_1 where d.base_id=table_1.base_id and table_1.bal=d.c order by d.base_id asc –
    • 嗨,子查询似乎可行,我尝试实现它,但似乎无法让它与嵌套表一起使用。谢谢,r :)
    • 我已经设法使用您的示例使其工作,并稍作修改,谢谢。似乎子查询是要走的路。谢谢。
    猜你喜欢
    • 2020-05-03
    • 2018-03-06
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多