Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL*Plus以获取每个不同分支Id值的最高成本维护值_Sql_Oracle_Max_Greatest N Per Group - Fatal编程技术网

Oracle SQL*Plus以获取每个不同分支Id值的最高成本维护值

Oracle SQL*Plus以获取每个不同分支Id值的最高成本维护值,sql,oracle,max,greatest-n-per-group,Sql,Oracle,Max,Greatest N Per Group,我正试图生成一份报告,说明在Oracle RDBMS中,每个分支中哪个房间的维护成本最高。是否只有通过自联接表才能实现这一点,是否可以通过使用子查询来实现这一结果 维护记录表: ROOM_NO BRANCH_ID COST_MAINT ---------- --------- ---------- 1 B001 23500 2 B001 3750 2 B001 4000 3 B00

我正试图生成一份报告,说明在Oracle RDBMS中,每个分支中哪个房间的维护成本最高。是否只有通过自联接表才能实现这一点,是否可以通过使用子查询来实现这一结果

维护记录表:

ROOM_NO    BRANCH_ID  COST_MAINT
---------- ---------  ----------
         1 B001      23500
         2 B001       3750
         2 B001       4000
         3 B001      23000
         5 B001       5300
         9 B001      25000
        43 B002       2500
        44 B002       5300
        48 B002       3750
        49 B002       3000
        49 B002       3750
        53 B003       4000
        56 B003       4000
        68 B003       4000
        75 B003      25000
        85 B004       5800
        86 B004       3000
       120 B005      25000
预期产出/报告:

 ROOM_NO    BRANCH_ID  COST_MAINT
---------- ---------  ----------
         9 B001      25000
        44 B002       5300
        75 B003      25000
        85 B004       5800
       120 B005      25000

您可以使用
row\u number()


在Oracle中,我建议使用聚合和
keep()

ROOM_NO | BRANCH_ID | COST_MAINT ------: | :-------- | ---------: 9 | B001 | 25000 44 | B002 | 5300 75 | B003 | 25000 85 | B004 | 5800 120 | B005 | 25000 房间号|分行| ID |成本|维护 ------: | :-------- | ---------: 9 | B001 | 25000 44 | B002 | 5300 75 | B003 | 25000 85 | B004 | 5800 120 | B005 | 25000
谢谢你的建议!!这对我很有帮助,我在这里学到了新东西。谢谢你的建议!!这很有帮助,我在这里学到了新东西。
select 
    max(room_no) keep(dense_rank first order by cost_maint desc) as room_no,
    branch_id,
    max(cost_maint) as cost_maint
from mytable
group by branch_id
ROOM_NO | BRANCH_ID | COST_MAINT ------: | :-------- | ---------: 9 | B001 | 25000 44 | B002 | 5300 75 | B003 | 25000 85 | B004 | 5800 120 | B005 | 25000